如果我使用LINQ的GroupBy()方法创建分组枚举,是否可以在另一个密钥系统下重新组合该结果?也就是说,如果我按属性X对代码的一部分对所有对象进行分组,是否可以随后在代码中的稍后一点按属性X的属性Y对该集合进行分组?
答案 0 :(得分:4)
我没有看到你的问题,但这有效:
var groupedByProperty1 = myEnumerable.GroupBy(x => x.Property1);
var groupedByProperty2 = groupedByProperty1.SelectMany(g => g)
.GroupBy(x => x.Property2);
这是你正在寻找的任何机会吗?
答案 1 :(得分:0)
这种稍微复杂的方式在某些情况下可能有用:
我发现我需要根据一个对Linq-SQL表达式来说过于复杂的额外条件重新组合,这就是我为这种情况提出的方法。
基本上我正在做的是:
注意:我创建了一个对象DateTime_PaymentStatus
来表示密钥。如果您这样做,请确保在课程中添加Equals()
方法,否则您将无法进行实际分组!
// sample to regroup based on modifying an existing key
var regrouped = grouped.
SelectMany(x => // each x is an individual grouping (Key + List)
// flatten the list, retaining the key each item was grouped by
x.Select(y => new
{
Key = x.Key,
Item = y
})).
// regroup based upon the existing key
GroupBy(x => new DateTime_PaymentStatus
{
// group based on date + payment status
Date = x.Key.Date,
PaymentStatus = PaidOrUnpaid(x.Key.PaymentStatus) // call function here that is not SQL compatible
});