实体框架动态与静态包括

时间:2014-08-28 23:03:51

标签: c# sql entity-framework-6

假设我有一个简单的类

public class foo
{
    public List<int> A {get;set;}
    public List<int> B {get; set;}
}

如果我跑

using(var ctx = new MyFooContext())
{
     var joins = ctx.foo.Include(x => x.A).Include(x => x.B).ToList();
     var includes = new List<Expression<Func<foo, object>>> {x => x.A, x => x.B);
     var noJoinQuey = ctx.foo.AsQueryable();
     includes.Each(i => noJoinrQuery.Include(i));
     var noJoins = noJoinQuery.ToList();
}

第一个joins将使用join语句生成查询,并在一个光荣的语句中运行。第二个noJoins执行一大堆单独的select语句。为什么呢?!

1 个答案:

答案 0 :(得分:0)

因此,.Include是返回对象的函数之一,因此您可以像query.Include().Include()一样链接它们,但是在循环中,它似乎不会这样做。如果我将其更改为

foreach(var p in includes)
{
    query = query.Include(p);
}

它有效。