表达式树&Linq2Sql
本文关键字:Linq2Sql 表达式 | 更新日期: 2023-09-27 18:05:23
在下面的Linq2Sql查询中,谁能告诉我
1) sql查询何时发送到sql server?
a)当查询被赋值表达式或
时b)(延迟执行)当它在foreach循环中被要求时?
var query = from c in myDataContext.Customers
where c.FirstName == 'Tom'
select c;
foreach(customer cust in query)
{
//...do something
}
2) .NET应用程序或SQL Server是否将表达式树转换为SQL查询?我问这个的原因是
a)我对表达式树所做的所有阅读都表明,它们是必要的,以便在网络上发送动态执行的代码,而不是发送MSIL。
b)如果我悬停在查询表达式被分配给它之后,我已经可以看到它已经改变了它的SQL
如果。net应用程序进行了转换,那么怎么能说表达式树是通过网络发送到sql server的呢?它只是发送了sql字符串
-
查询在绝对需要的时候被发送到数据库-通常是当你开始实际请求数据时。
换句话说,它可能是对
GetEnumerator()
的调用或对IEnumerator<T>.MoveNext()
的第一次调用。 -
c#编译器将lambda表达式转换为IL,在执行时生成表达式树对象。然后LINQ to SQL将表达式树转换成SQL发送给数据库。
表达式树对于LINQ to SQL来说是必需的,以便有一个"数据"。表示代码,以便在执行时将其转换为SQL。它仍然是通过网络发送的SQL,但是需要表达式树来创建SQL。
有很多关于这类事情的博客文章,包括我不久前写的这篇