c# - Linq - OrderByDescending 和 Take(1),它会返回最大项目吗?

标签 c# linq

我有这行 C# 代码:

datavals
  .GroupBy(x => new { x.ElementID, x.OutputTableCode})
  .SelectMany(x => x
     .OrderByDescending(y => y.Sequence)
     .Take(1))
  .ToList<TransactionValue<string>>();

这个想法是通过 ElementIDOutputTableCode 对列表中的项目进行分组,然后根据降序对每个组进行排序,并仅返回一个每组项目。 (这实际上是在 return 语句中,因此修改后的列表将返回给调用函数。)

我的问题是,这会返回具有最大序列的项目,还是不一定如此?在我的测试示例中,确实如此,但不确定是否得到保证。

如果它不一定返回每组中具有最大序列的项目,我如何更改查询来做到这一点?

最佳答案

如果序列为空,它将始终返回序列的最大值或空序列。

我们现在无法知道序列的顺序,因此如果我们按 desc 排序 - 我们将得到按 desc 排序的序列(最大值 - 第一个,最小值 - 最后)。执行.Take(1)相当于执行.FirstOrDefault(),因此我们将获得序列的最大值。

如果您对 .Take() 有疑问,您可以随时使用 .FirstOrDefault() 或简单地使用 .First() 来检索第一个值的顺序。

如果您只想获取最大值,可以使用linq .Max(),您可以在其中设置比较器属性,例如 .Max(x => x.Sequence)

关于c# - Linq - OrderByDescending 和 Take(1),它会返回最大项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006812/

相关文章:

c# - 无法将类型 'Newtonsoft.Json.Linq.JProperty' 转换为 'Newtonsoft.Json.Linq.JObject'

c# - 将 HttpCookieCollection 转换为 NameValueCollection

c# - 在 .NET WinForms 中获取 MFC 功能包 GUI 元素

c# - 选择列表的字典键和值

c# - 在写入 Logger 或 Console 时将 foreach 转换为 LINQ

c# - 基于linq查询获取数据库值

c# - Entity Framework 在获取数据之前或之后执行 lambda 表达式吗?

c# - Hololens 上的 C# Unity 中未找到模块 C++ .dll

c# - 选择其中一列包含值的列是否可能?在林克

c# - OrderBy 的特例