如何按属性1分组可查询对象,但按属性2排序
本文关键字:属性 对象 2排序 何按 1分 查询 | 更新日期: 2023-09-27 18:11:17
根据我之前的问题
我用var distinctAllEvaluationLicenses = allEvaluationLicenses.GroupBy((License => License.dateCreated)).OrderByDescending(lics => lics.Key).First();
对IQueryable
进行分组allEvaluationLicenses
使用许可证的属性1,该属性为'dateCreated'
但是现在,我如何通过使用不同的属性,如'nLicenceID'来订购它们?
是否可以这样做:
var distinctAllEvaluationLicenses = allEvaluationLicenses.GroupBy((License => License.dateCreated)).OrderByDescending(lics => (sort by nLicenseID here) ).First();
对于LINQ-to-Objects, 每个组中的对象保持它们被发现时的顺序:
根据产生每个
IGrouping<TKey, TElement>
的第一个键的源元素的顺序产生IGrouping<TKey, TElement>
对象。组中的元素按照它们在source中出现的顺序生成。
所以:如果你的目标是排序内容每组,只需排序源:
var distinctAllEvaluationLicenses = allEvaluationLicenses
.OrderByDescending({whatever})
.GroupBy({etc}).First();
请注意,这不能保证对其他LINQ源有效,并且请注意,它不影响组呈现的顺序。要做到这一点,你可以这样做:
var distinctAllEvaluationLicenses = allEvaluationLicenses
.GroupBy({etc}).
.OrderBy(grp => grp.Min(item => x.SomeProp)).First();
表示组按SomeProp
最小的顺序排列。显然,根据需要调整为max/etc
要对组内的项目进行排序,您可以使用Select
:
var distinctAllEvaluationLicenses = allEvaluationLicenses.GroupBy(License => License.dateCreated)
.Select(group => group.OrderByDescending(item => item.nLicenceID));