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

时间:2015-12-26 22:17:15

标签: c# .net 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);

我有两个问题:

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

在这种情况下,.Select是不必要的,因为.Cast已经保证你正在使用IEnumerable&lt; string&gt;。

.OrderBy和.Where的排序不会影响查询的结果,但一般情况下如果你使用。那么首先你会获得更好的性能,因为要排序的元素会更少。