我有一个字符串列表,我想订购它们。
IEnumerable<String> strings = ...;
strings = strings.OrderBy(a => a);
我不明白的是lambda表达式a => a的意义。首先,我认为我可以像这样一样提取属性和顺序。
IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.OrderBy(a => a.StringProperty);
但这不能编译。所以我必须这样走。
IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.Select(a
=> a.StringProperty).OrderBy(a => a);
那么,为什么我必须在OrderBy命令中使用lambda表达式?
最佳答案
lambda表示“您要订购的商品”。
如果您要一组人,并在他们的生日之前订购他们,那么您仍然有一组人,而不是一组生日;即
IEnumerable<Person> people = ...;
IEnumerable<Person> sorted = people.OrderBy(a => a.DateOfBirth);
同样,按
Something
排序一组StringProperty
仍会导致一组Something
:IEnumerable<Something> somethings = ...;
IEnumerable<Something> sorted = somethings.OrderBy(a => a.StringProperty);
在某些(极少数)情况下,您实际上的意思是“并根据事物本身对其进行排序”。这通常仅适用于
IEnumerable<string>
或IEnumerable<int>
之类的东西,因此.OrderBy(x => x)
的不便之处很小。如果您不满意,可以随时编写扩展方法来隐藏此细节。