使用Take过滤器查询Linq查询性能

时间:2015-09-23 10:21:45

标签: c# linq linq-to-sql

以下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();

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以直接链接大多数LINQ查询,因为大多数LINQ查询都是延迟执行的。这种表达式的结果是一种查询计划,在您致电ToListToArray之前执行。

说完这两个问题完全相同。

有关此主题的更多信息,请阅读deferred execution and lazy evaluation