Этот немного более сложный способ может быть полезен в некоторых случаях:
- Ключ 'столбцы' не присутствует в самих элементах данных
- Вы хотите создать новый ключнепосредственно по существующему, сгруппированному по ключу.
Я обнаружил, что мне нужно перегруппировать на основе дополнительных критериев, которые были слишком сложными для выражения 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
});