考虑这个示例代码
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)
我有两个问题:
Select如果自己Where返回相同的类型,是否需要编写最后一个子句?这个例子来自msdn,为什么他们总是写它?Select和Where,或OrderBy?不,Select如果您实际上没有转换返回的类型,则没有必要.
在这种情况下,方法调用的顺序可能会影响性能.在过滤之前对所有对象进行排序肯定比过滤需要更长的时间,然后对较小的数据集进行排序.
在这种情况下 .Select 是不必要的,因为 .Cast 已经保证您正在使用 IEnumerable<string>。
.OrderBy 和 .Where 的排序不会影响查询的结果,但一般来说,如果您首先使用 .Where,您将获得更好的性能,因为要排序的元素会更少。