3

我是实体框架 (EF) 和 LINQ 的新手。

我的问题有点冗长,但非常简单。如果我创建一个查询以使用 LINQ 从我的 RDBMS 中检索数据,请说:

using (MyEntities myEntities = new MyEntities())
{
    // ...
    var query = from rec in myEntities.SomeTable
                where rec.Id == someId
                select rec;
    // ...
}

最终执行时,这实际上是转换为 SQL 并在数据库本身上执行(无论该机器在哪里),还是首先将底层记录实际检索到主机上,然后由正在运行的应用程序本身过滤(使用一些 LINQ 和/或EF魔法)。

IOW,是否会将上面“SomeTable”中的所有记录从底层数据库检索到主机上,然后 LINQ 和/或 EF 负责使用给定的“someId”定位记录,或者将上述查询转换为一个实际的 SQL 语句并在数据库机器本身上执行(然后返回给定的记录)。

我认为是后者(否则效率会非常低)但有人可以证实这一点。此外,这是否适用于无论 LINQ 查询多么复杂(因为它可能包含复杂的连接等),但不包括任何可能在查询中调用的本地函数。

我只是想从概念上理解幕后发生的事情,以及 LINQ 是否可以有效地用作传统 SQL 文本查询的高级替代品(即,LINQ 在幕后创建实际的 SQL 查询并将它们发送到用于执行的数据库,但不参与实际执行本身,除了处理查询中的本地函数调用(如果有)。提前致谢。

4

1 回答 1

3

后台生成了一个 SQL 查询。仅获取相关数据可能与要求一样复杂。

如果由于数据库不支持某些 LINQ 功能而无法生成查询,则不会编译整个表达式(到 sql)。如果您想获取所有数据,然后在客户端以复杂的方式过滤,您可以手动覆盖此行为。为此,您可以在 LINQ 查询的某个早期位置放置.ToList()或放置,然后继续执行该列表。.ToArray()where

您还可以查看生成的 SQL

更多阅读:LINQ to SQL 查询

于 2012-07-22T16:29:19.090 回答