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

标签 sql linq linq-to-sql code-reuse

作为一个不熟悉 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 实体,它定义了 agefirstName字段,从数据库的角度来看,这会做什么?具体来说,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/

相关文章:

c# - linq2sql 呈现不必要的 ORDER BY

sql - 或者使用 Group By 条件

sql - 选定的非聚合值必须是关联组的一部分

mysql - 仅当有要分组的行时才分组

sql - 如何在多列中应用相同的 COALESCE 参数

c# - 检查是否是 bool 值?在动态 Lambda 中为真

c# - Linq 中 GroupBy 的案例条件用于重复记录

C# Linq - 如何从第一个值拆分的 List<string> 中选择前 5 行

sql - 使用 LINQ to SQL 设计仅附加数据访问层

c# - 使用 Linq to SQL 进行单元测试实践