/// <summary> /// 将实体类容器转换为对象列表 /// <example> /// <code> /// <![CDATA[ /// OQL q=OQL.From(entity1) /// .Join(entity2).On(entity1.PK,entity2.FK) /// .Select(entity1.Field1,entity2.Field2) /// .End; /// EntityContainer ec=new EntityContainer(q); /// var list=ec.ToObjectList( e => /// { /// return new { /// Property1=e.GetItemValue<int>(0), /// Property2=e.GetItemValue<string>(1) /// }; /// }); /// /// foreache(var item in list) /// { /// Console.WriteLine("Property1={0},Property2={1}",item.Property1,item.Property2); /// } /// ]]> /// </code> /// </example> /// </summary> /// <typeparam name="TResult">结果的列表元素类型</typeparam> /// <param name="fun">容器结果委托函数</param> /// <returns>对象列表</returns> public IList <TResult> ToObjectList <TResult>(ECResultFunc <TResult> fun) where TResult : class { if (this.Values == null) { this.Execute(); } List <TResult> resultList = new List <TResult>(); if (this.Values != null && this.fieldNames != null) { foreach (object[] itemValues in this.Values) { this.currValue = itemValues; TResult t = fun(this); resultList.Add(t); } return(resultList); } else { throw new Exception("EntityContainer 错误,执行查询没有返回任何行。"); } }
/// <summary> /// 直接返回实体类列表查询结果 /// <example> /// <code> /// <![CDATA[ /// var list= OQL.From(entity1) /// .Join(entity2).On(entity1.PK,entity2.FK) /// .Select(entity1.Field1,entity2.Field2) /// .End /// .ToObjectList( e => /// { /// return new MyViewModel{ /// Property1=e.GetItemValue<int>(0), /// Property2=e.GetItemValue<string>(1) /// }; /// }); /// /// foreache(MyViewModel item in list) /// { /// Console.WriteLine("Property1={0},Property2={1}",item.Property1,item.Property2); /// } /// ]]> /// </code> /// </example> /// </summary> /// <param name="q">OQL对象</param> /// <param name="ecFun">结果对象映射委托</param> /// <typeparam name="TResult">结果元素类型</typeparam> /// <returns>实体类列表</returns> public static IList <TResult> ToObjectList <TResult>(this OQL q, ECResultFunc <TResult> ecFun) where TResult : class { EntityContainer ec = new EntityContainer(q); return(ec.ToObjectList <TResult>(ecFun)); }