13,347
社区成员




/// <summary>
/// 实体数据容器
/// </summary>
public class EntityContainer
{
private string[] fieldNames;
private List<object[]> Values;
private object[] currValue;
}
/// <summary>
/// 执行DataReader查询,并将查询结果缓存
/// </summary>
/// <param name="reader">数据阅读器</param>
/// <returns>结果行数</returns>
public int Execute(IDataReader reader)
{
List<object[]> list = new List<object[]>();
using (reader)
{
if (reader.Read())
{
int fcount = reader.FieldCount;
fieldNames = new string[fcount];
object[] values = null;
for (int i = 0; i < fcount; i++)
fieldNames[i] = reader.GetName(i);
do
{
values = new object[fcount];
reader.GetValues(values);
list.Add(values);
} while (reader.Read());
}
}
this.Values = list;
return list.Count;
}
/// <summary>
/// 采用自定义的映射方式,将数据容器中的数据映射到指定的类中
/// </summary>
/// <typeparam name="TResult">结果类型</typeparam>
/// <param name="fun">处理数据的方法</param>
/// <returns></returns>
public IEnumerable<TResult> Map<TResult>(Func<TResult> fun) where TResult : class, new()
{
if (this.Values != null && this.fieldNames != null)
{
foreach (object[] itemValues in this.Values)
{
TResult t = new TResult();
this.currValue = itemValues;
fun(t);
yield return t;
}
}
else
{
throw new Exception("EntityContainer 错误,调用该方法前请先调用Execute 方法。");
}
}
EntityContainer ec = new EntityContainer(q, db);
ec.Execute();
var mapUser2= ec.Map<User>((e) =>
{
e.Age = ec.GetItemValue<int>("Age");
e.ID = ec.GetItemValue<int>("ID");
e.Name = ec.GetItemValue<string>("name");//不区分大小写
return e;
}
).ToList ();
/// <summary>
/// 将数据从容器中映射到实体中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IEnumerable<T> Map<T>() where T : EntityBase{
//具体代码略
}
EntityContainer ec = new EntityContainer(q, db);
ec.Execute();
var mapUser1 = ec.Map<User>().ToList ();
OQL q=OQL.From(user)
.JoinIn(group) //连接Group实体
.On(user.GroupID=group.ID)
.Select(user.ID,user.Name,group.GroupName) //选取指定的字段
EntityContainer ec = new EntityContainer(q, db);
ec.Execute();
var mapUser1 = ec.Map<User>().ToList ();
var mapGroup1= ec.Map<Group>().ToList();
class UserGroup
{
int ID{get;set;}
string Name{get;set;}
string GroupName{get;set;}
}
EntityContainer ec = new EntityContainer(q, db);
ec.Execute();
var mapEntity= ec.Map<UserGroup>((e) =>
{
e.GroupName = ec.GetItemValue<int>("GroupName");
e.ID = ec.GetItemValue<int>("ID");
e.Name = ec.GetItemValue<string>("name");//不区分大小写
return e;
}
).ToList ();