LINQ是否将代码转换为SQL查询

时间:2012-07-22 16:26:59

标签: .net linq entity-framework

我是实体框架(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查询并发送它们关闭到DB执行,但不参与实际执行本身,除了在查询中处理本地函数调用,如果有的话)。提前谢谢。

1 个答案:

答案 0 :(得分:3)

在后台生成一个SQL查询。它可能与仅获取相关数据所需的一样复杂。

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

您也可以view the resulting SQL

更多阅读:LINQ to SQL Queries