1

从我之前的问题here

我用了

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();
4

2 回答 2

0

对于 LINQ-to-Objects,每个组的对象保留它们被发现的顺序:

对象的IGrouping<TKey, TElement>生成顺序基于 source 中生成 each 的第一个键的元素的顺序IGrouping<TKey, TElement>。分组中的元素按照它们在源中出现的顺序产生。

所以:如果您的目标是订购每个组的内容,只需订购来源:

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。

于 2013-04-29T17:28:21.120 回答
0

要对组内的项目进行排序,您可以使用Select

var distinctAllEvaluationLicenses = allEvaluationLicenses.GroupBy(License => License.dateCreated)
    .Select(group => group.OrderByDescending(item => item.nLicenceID));
于 2013-04-29T17:30:54.170 回答