【问题标题】:Entity Framework: Multiple Where Statements Execution Plan实体框架:多个 Where 语句执行计划
【发布时间】:2011-07-06 06:30:55
【问题描述】:

我正计划准备一些方法,这些方法返回我已过滤的数据库表中的元素集合,然后对这些集合执行查询。 我想知道第一个过滤是否会作为单独的语句执行还是会被加入。

例如

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

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

第二种方法会命中数据库一次还是两次?

谢谢

【问题讨论】:

    标签: c# sql entity-framework iqueryable


    【解决方案1】:

    IQueryable 只有在访问结果集合时才会在 sql 中翻译。 那是因为您的代码访问了数据库一次。 This topic解释了这一点

    【讨论】:

    • 它可以随时转换为 SQL - 您只需将其转换为 ObejctQuery 并调用 ToTraceString 即可获得 SQL。但它遵循与任何其他 linq 查询相同的延迟执行规则。您必须开始迭代集合或调用 ToList 或 First 等方法来执行查询。
    • 嗯,这是一些方便的方法(ToTraceString),我不知道它存在。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多