c# - OrderBy 中的 lambda 表达式有什么意义?

标签 c# linq

我有一个字符串列表,我想对它们进行排序。

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);

同样,订购一组 SomethingStringProperty仍然会产生一组 Something小号:

IEnumerable<Something> somethings = ...;
IEnumerable<Something> sorted = somethings.OrderBy(a => a.StringProperty);

在某些(极少数)情况下,您的意思确实是“并按事物本身排序”。这通常仅适用于 IEnumerable<string> 之类的东西或 IEnumerable<int> - 所以轻微的不便.OrderBy(x => x)是微不足道的。如果它困扰你,你总是可以编写一个扩展方法来隐藏这个细节。

关于c# - OrderBy 中的 lambda 表达式有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166227/

相关文章:

c# - 在 C# 上登录用户后注销

c# - 当底层匿名类型相似时,如何在Linq中合并两个列表?

sql-server - 从 LINQ to SQL 查询时间戳列

c# - 只获取第一个项目与 SyndicateItem/foreach 的替代品

.net - 在 LINQ 查询中获取当前枚举器(迭代器?)。就像 for 循环中的当前索引一样

LINQ - 使用 where 或 join - 性能差异?

c# - 固定长度的 Int 混淆器。有谁知道如何做到这一点?

c# - 如果一个测试用例在通过 VSTS 运行相关测试时失败,则整个测试套件将失败

c# - Yahoo Sports API 问题

c# - 如何以编程方式为 log4net 中的两个附加程序获取记录器?