我有一个字符串列表,我想订购它们。

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)的不便之处很小。如果您不满意,可以随时编写扩展方法来隐藏此细节。

09-25 19:12