如何按属性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();

如何按属性1分组可查询对象,但按属性2排序

对于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));
相关文章: