订购OrderBy,Where,在Linq查询中选择

Wac*_*urn 3 .net c# linq

考虑这个示例代码

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query = fruits.Cast<string>()
    .OrderBy(fruit => fruit)
    .Where(fruit => fruit.StartsWith("m"))                
    .Select(fruit => fruit);
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. Select如果自己Where返回相同的类型,是否需要编写最后一个子句?这个例子来自msdn,为什么他们总是写它?
  2. 这些方法的正确顺序是什么?订单会影响某些事情吗?如果我换 SelectWhere,或OrderBy

sst*_*tan 8

  1. 不,Select如果您实际上没有转换返回的类型,则没有必要.

  2. 在这种情况下,方法调用的顺序可能会影响性能.过滤之前所有对象进行排序肯定比过滤需要更长的时间,然后对较小的数据集进行排序.


Bru*_*ton 5

在这种情况下 .Select 是不必要的,因为 .Cast 已经保证您正在使用 IEnumerable<string>。

.OrderBy 和 .Where 的排序不会影响查询的结果,但一般来说,如果您首先使用 .Where,您将获得更好的性能,因为要排序的元素会更少。