C# 实体框架:多个Where语句执行计划

C# 实体框架:多个Where语句执行计划,c#,sql,entity-framework,iqueryable,C#,Sql,Entity Framework,Iqueryable,我正计划准备一些方法,这些方法返回给我一个DB表中已经过滤过的元素集合,然后对这些集合执行查询。 我想知道第一次过滤是作为一个单独的语句执行,还是合并执行 e、 g publicIQueryable GetAlivePersons(){ 返回数据库人员,其中(p=>!p.isDecease); } 公共IQueryable GetElderPeople(){ 返回GetAlivePersons(),其中(p=>p.Age>75); } 第二种方法会击中数据库一次还是两次 谢谢IQueryabl

我正计划准备一些方法,这些方法返回给我一个DB表中已经过滤过的元素集合,然后对这些集合执行查询。 我想知道第一次过滤是作为一个单独的语句执行,还是合并执行

e、 g

publicIQueryable GetAlivePersons(){
返回数据库人员,其中(p=>!p.isDecease);
}
公共IQueryable GetElderPeople(){
返回GetAlivePersons(),其中(p=>p.Age>75);
}
第二种方法会击中数据库一次还是两次


谢谢

IQueryable
仅在您访问结果集合时才转换为sql。
这是因为您的代码只命中了一次DB。解释这一点

它可以随时转换为SQL-您只需将其转换为
ObejctQuery
并调用
ToTraceString
,就可以得到SQL。但它遵循与任何其他linq查询相同的差异执行规则。您必须开始迭代集合或调用方法,如ToList或First来执行查询。好吧,这是一个很方便的方法(ToTraceString),我不知道它存在。谢谢你。
public IQueryable<Person> GetAlivePersons(){
    return db.Persons.Where(p => !p.IsDeceased);
}

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