表达式树&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字符串

表达式树&Linq2Sql

  1. 查询在绝对需要的时候被发送到数据库-通常是当你开始实际请求数据时。

    换句话说,它可能是对GetEnumerator()的调用或对IEnumerator<T>.MoveNext()的第一次调用。

  2. c#编译器将lambda表达式转换为IL,在执行时生成表达式树对象。然后LINQ to SQL将表达式树转换成SQL发送给数据库。

表达式树对于LINQ to SQL来说是必需的,以便有一个"数据"。表示代码,以便在执行时将其转换为SQL。它仍然是通过网络发送的SQL,但是需要表达式树来创建SQL。

有很多关于这类事情的博客文章,包括我不久前写的这篇