2011-03-01 31 views
3

我打算准备一些方法,使我已经过滤了数据库表中的元素的集合,然后对这些集合执行查询。 我想知道如果第一个过滤将作为一个单独的声明执行或将其加入。实体框架:多个地方声明执行计划

例如

public IQueryable<Person> GetAlivePersons(){ 
    return db.Persons.Where(p => !p.IsDeceased); 
} 

public IQueryable<Person> GetElderPeople(){ 
    return GetAlivePersons().Where(p => p.Age > 75); 
} 

将在第二方法打DB一次或两次?

感谢

回答

2

IQueryable翻译在SQL中,只有当你访问结果集。 那是因为你的代码碰到DB一次。 This topic解释了这一点

+0

它可以随时转换为SQL - 您可以将其转换为ObejctQuery并调用ToTraceString,您将获得SQL。但它遵循与任何其他linq查询相同的执行规则。您必须开始迭代收集或调用ToList或First等方法来执行查询。 – 2011-03-01 09:09:25

+0

那么,这是一个方便的方法(ToTraceString),我不知道它存在。感谢那。 – willvv 2011-03-03 18:57:27