OrderBy中lambda表达式的重点是什么?

Kon*_*ten 2 c# linq

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

IEnumerable<String> strings = ...;
strings = strings.OrderBy(a => a);
Run Code Online (Sandbox Code Playgroud)

我没有得到的是lambda表达式a => a的重点.首先,我认为我可以像这样拿出一个房产和订单.

IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.OrderBy(a => a.StringProperty);
Run Code Online (Sandbox Code Playgroud)

但那不编译.所以我必须这样做.

IEnumerable<Something> somethings = ...;
IEnumerable<String> strings = somethings.Select(a
  => a.StringProperty).OrderBy(a => a);
Run Code Online (Sandbox Code Playgroud)

那么为什么我强制要在OrderBy命令中使用lambda表达式?!

Mar*_*ell 6

lambda表示"你想要订购什么".

如果你带一群人,并在他们的生日订购,你仍然有一组人 - 而不是一组生日; 即

IEnumerable<Person> people = ...;
IEnumerable<Person> sorted = people.OrderBy(a => a.DateOfBirth);
Run Code Online (Sandbox Code Playgroud)

所以类似地,按顺序排序一组Somethings会StringProperty产生一组Somethings:

IEnumerable<Something> somethings = ...;
IEnumerable<Something> sorted = somethings.OrderBy(a => a.StringProperty);
Run Code Online (Sandbox Code Playgroud)

在一些(很少)的情况下,你实际上意味着"并通过事物本身对其进行排序".这通常只适用于像IEnumerable<string>或者IEnumerable<int>- 因此轻微的不便.OrderBy(x => x)是微不足道的.如果它困扰你,你总是可以写一个扩展方法来隐藏这个细节.