不同的LINQ命令执行和性能



我有以下LINQ查询:

Person
.OrderBy(x => x.FirstName)
.Where(x => x.FirstName.Contains("a"));

我也可以用以下方式编写这个查询:

Person
.Where(x => x.FirstName.Contains("a"))
.OrderBy(x => x.FirstName);

两者的结果相同。我的问题是,这两个查询之间有什么区别?哪一个更好?为什么

如果使用Linq-To-Entities(或任何数据库提供程序(,可能根本没有区别,因为数据库将负责优化。但总的来说,尤其是Linq-To对象,后者更好,因为订购更少更有效。

此外,古鲁的评论是正确的,即理论上的结果可能不同。Enumerable.Where不保证文件中的订单。但他们不会改变它,因为他们会破坏很多代码(这里提到,如果输入序列是有序的,那么顺序是稳定的(。编辑:实际上有些提供者已经任意更改了顺序(例如PLINQ(。

很久以前我问过一个类似的问题,你可能会觉得这个答案很有帮助:LINQ扩展方法的顺序不会影响性能吗?请注意,它只是关于Linq To对象。

最新更新