作为一个非C#精通的程序员,我对LINQ查询的评估语义感到好奇,如下所示:
var people = from p in Person where p.age < 18 select p var otherPeople = from p in people where p.firstName equals "Daniel" select p
假设这Person是一个定义了ageandfirstName字段的ADO实体,那么从数据库的角度来看,这将做什么?具体来说,是否people将运行查询以生成内存中的结构,然后由otherPeople查询查询该结构?还是otherPeople仅从中提取有关查询的数据people,然后产生一个新的数据库对等查询的结构?因此,如果我遍历这两个查询,将执行多少个SQL语句?
Person
age
firstName
people
otherPeople
它们是可组合的。这是可能的,因为LINQ查询实际上是表达式(作为数据的代码),诸如LINQ-to-SQL之类的LINQ提供程序可以评估并生成相应的SQL。
由于LINQ查询的计算是延迟的(例如,直到您遍历元素时才会执行),因此显示的代码实际上不会触及数据库。直到您遍历其他人,否则人们才会生成并执行SQL。