带Take过滤器的Linq查询性能
本文关键字:查询 性能 Linq Take 过滤器 | 更新日期: 2023-09-27 18:14:01
以下linq查询的性能是否有差异:
var query = from q in this.context.SomeTable
where q.SomeId == SomeId
select new SomeViewModel
{
PrimaryAttr = q.PrimaryAttr;
Attribute1 = q.Attribute1,
Attribute2 = q.Attribute2,
Attribute3 = q.Attribute3
};
query = query.OrderByDescending(q => q.PrimaryAttr).Take(5).ToList();
如果我先在同一行中过滤查询:
var query = (from q in this.context.SomeTable
where q.SomeId == SomeId
select new SomeViewModel
{
PrimaryAttr = q.PrimaryAttr;
Attribute1 = q.Attribute1,
Attribute2 = q.Attribute2,
Attribute3 = q.Attribute3
}).OrderByDescending(q => q.PrimaryAttr).Take(5).ToList();
不,它们是完全相同的查询。
请注意,在执行ToList方法之前,查询不会执行。
您可以直接链接大多数LINQ查询,因为大多数查询执行延迟。这种表达式的结果是一种查询计划,直到调用ToList
或ToArray
时才执行。
话虽如此,你的两个查询是完全相同的。
有关此主题的详细信息,请阅读延迟执行和延迟求值