我有这行 C# 代码:
datavals
.GroupBy(x => new { x.ElementID, x.OutputTableCode})
.SelectMany(x => x
.OrderByDescending(y => y.Sequence)
.Take(1))
.ToList<TransactionValue<string>>();
这个想法是通过 ElementID
和 OutputTableCode
对列表中的项目进行分组,然后根据降序对每个组进行排序,并仅返回一个每组项目。 (这实际上是在 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/