.net - Linq后期处理行为

标签 .net database linq orm late-binding

在这种情况下:

var allCustomers = from c in customers select c;
var oldCustomers = from o in allCustomers where o.age > 70 select o;

where 子句会到达数据库吗?

最佳答案

我想你的意思是:

var oldCustomers = from o in allCustomers where o.age > 70 select o;

是的,它将到达数据库。

尝试使用 LINQPad 查看生成的 SQL 代码。这是一个例子:

我有一个包含以下字段的 Actor 表:

编号 |名称 |年龄

代码:

var x = from c in Actors where c.Name.Contains("a") select c;
var y = from c in x where c.Age > 0 select c;

被翻译成:

-- Region Parameters
DECLARE @p0 Int = 0
DECLARE @p1 NVarChar(3) = '%a%'
-- EndRegion
SELECT [t0].[Id], [t0].[Name], [t0].[Age]
FROM [Actor] AS [t0]
WHERE ([t0].[Age] > @p0) AND ([t0].[Name] LIKE @p1)

因此您可以看到它如何将两个查询混合在一个查询中。

请记住,IEnumerables 是惰性的,因此您除非必须知道它们的元素(因为您遍历它们,或者因为您执行 .Count() 以查看有多少项,等等),它不会执行任何查询/操作。

关于.net - Linq后期处理行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085267/

相关文章:

.net - System.Guid.NewGuid() 的随机性如何? (拿两个)

c# - CLR 什么时候说一个对象有终结器?

mysql - 用于动态表单创建的高效 MySQL 数据库结构

php - 如何根据另一个字符串的值获取表值?

c# - LINQ 的左外连接运行时错误

c# - 组合来自多个列表的信息

.net - 连续的 .NET 并行 For - 每个之后阻塞

.net - Silverlight:流中的 BitmapImage 引发异常(灾难性失败(HRESULT 异常:0x8000FFFF (E_UNEXPECTED)))

database - 数据库表应该总是有主键吗?

c# - 在 C# 中测试 'lazy loaded' null IEnumerable?