LINQ-to-SQL是否支持可组合查询?

Dan*_*wak 5 sql linq code-reuse linq-to-sql

作为一名非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
Run Code Online (Sandbox Code Playgroud)

假设这Person是一个定义agefirstName字段的ADO实体,从数据库的角度来看,它会做什么?具体来说,是否people运行查询以生成内存结构,然后查询将otherPeople查询该结构?或者构建otherPeople只是从中提取有关查询的数据people,然后生成一个新的数据库对等查询?那么,如果我遍历这两个查询,那么将执行多少个SQL语句?

Jud*_*ngo 12

它们是可组合的.这是可能的,因为LINQ查询实际上是表达式(代码作为数据),LINQ提供程序(如LINQ-to-SQL)可以评估并生成相应的SQL.

因为LINQ查询被懒惰地评估(例如,在迭代元素之前不会执行),所以您显示的代码实际上不会触及数据库.直到你迭代其他人或人们将SQL生成并执行.