自定义LINQ .Include()扩展名

时间:2011-08-24 12:16:34

标签: linq entity-framework extension-methods

鉴于以下伪代码,如何使用.Include调用此函数并将其传递给ctx.Table

public class Complicated
{
// fields here
}


public IEnumerable<Complicated> GetComplicatedData<T>()
{

   using(MyDbCtx ctx = new MyDbCtx())
   {
      return ctx.Set<T>().Select(p=> new Complicated { /* fill */ }).ToList();
   }

}

1 个答案:

答案 0 :(得分:1)

你做不到。您的方法正在进行投影,即使您找到了永远不会使用您的包含的方式。如果您想使用Include,您必须以这种方式使用方法:

ctx.Table.Include(...).ToList().Select(p => new Complicated { ... });

此示例没有多大意义,因为您知道填充Complicated项目所需的数据,因此您可以直接通过linq-to-entites填充它们,而无需使用Include或你知道你需要通过linq-to-objects填充你的Complicated实体。

自定义投影类没有急切或延迟加载。