C# 10 .Net 6 MinBy MaxBy Linq 投影到单个属性

use*_*142 2 .net c# linq

在 C# 10 .Net 6 中的newMinBy或调用之后是否有内联方式来投影属性?MaxBy

double topPriceInList = prices.MaxBy(h => h.High)."Select(h => h.High)";
Run Code Online (Sandbox Code Playgroud)

当然,Visual Studio 2021 不喜欢我尝试过的任何一个。

Dai*_*Dai 5

MaxBy(this IEnumerable<T>)并且MinBy(this IEnumerable<T>)不返回IEnumerable<T>- 它们返回单个元素(即T),所以只需这样做:

double topPriceInList = prices.MaxBy(h => h.High).High;
Run Code Online (Sandbox Code Playgroud)

也就是说,上面的代码不需要MaxBy,只需使用Max

double topPriceInList = prices.Max(h => h.High);

// or:

double topPriceInList = prices.Select(h => h.High).Max();
Run Code Online (Sandbox Code Playgroud)
  • 请注意Min,如果源集合为空(或者任何先前的步骤消除了所有元素),MaxMinBy、 和MaxBy都会在运行时抛出异常.Where
  • ...所以您可能需要使用MinOrDefaultMaxOrDefaultMaxByOrDefaultMaxByOrDefault,在这种情况下使用空安全导航运算符?.(又名elvis-operator)。
    • 但请确保...OrDefault()扩展方法被调用IEnumerable<Nullable<T>>,而不是 IEnumerable<T>因为default(T)值类型永远不会被调用null,这是错误的常见来源。
double? topPriceInListOrNull = prices.Select(h => (double?)h.High).MaxOrDefault();
Run Code Online (Sandbox Code Playgroud)