作为一个不熟悉 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
是一个 ADO 实体,它定义了 age
和 firstName
字段,从数据库的角度来看,这会做什么?具体来说,people
运行查询以生成内存结构,然后由 otherPeople
查询。询问?或者会 build otherPeople
只需从 people
中提取有关查询的数据然后生成一个新的数据库对等查询?那么,如果我对这两个查询进行迭代,将执行多少条 SQL 语句?
最佳答案
它们是可组合的。这是可能的,因为 LINQ 查询实际上是表达式(代码即数据),LINQ-to-SQL 等 LINQ 提供程序可以评估并生成相应的 SQL。
因为 LINQ 查询是惰性求值的(例如,在您遍历元素之前不会执行),所以您显示的代码实际上不会触及数据库。直到您迭代 otherPeople 或 people 才会生成并执行 SQL。
关于sql - LINQ-to-SQL 是否支持可组合查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/89193/