带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();

带Take过滤器的Linq查询性能

不,它们是完全相同的查询。

请注意,在执行ToList方法之前,查询不会执行。

您可以直接链接大多数LINQ查询,因为大多数查询执行延迟。这种表达式的结果是一种查询计划,直到调用ToListToArray时才执行。

话虽如此,你的两个查询是完全相同的。

有关此主题的详细信息,请阅读延迟执行和延迟求值