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