LINQ группирует список и исключает группы, содержащие запись со значением поля. ⇐ C#
-
Anonymous
LINQ группирует список и исключает группы, содержащие запись со значением поля.
У меня возникли проблемы с настройкой лямбды для исключения групп с записью, в которой есть поле со значением. Пример моих данных:
CTY ProcId ProcTyp ProcDate ZZZ 23-015 ИНИЦИТ 2023-01-26T20:04:30 ZZZ 23-015 ОБНОВЛЕНИЕ 26.01.2023T20:04:45 ZZZ 23-015 ЗАГРУЗИТЬ 2023-01-26T20:05:00 ZZZ 23-015 ЗАГРУЗИТЬ 31.05.2023T15:12:01 ZZZ 23-015 УДАЛИТЬ 25.07.2023T12:28:38 ZZZ 23-246 ИНИТ 2023-11-07T23:31:09 ZZZ 23-246 УДАЛИТЬ 2023-11-08T16:49:55 ZZZ 23-248 ИНИТ 2023-11-08T16:40:18 ZZZ 23-248 ОБНОВЛЕНИЕ 2023-11-08T16:43:14 ZZZ 23-248 ЗАГРУЗИТЬ 2023-11-08T16:43:35 Я хочу сгруппировать данные по CTY, а затем по ProcId, а затем получить MAX ProcDate. Однако те группы, которые имеют 1 или более ProcTyp = 'DELETE', должны быть исключены из группировки. Я не просто хочу отфильтровать эти записи, а отфильтровать ГРУППЫ, в которых есть эти записи. В этом случае результатом должен быть список:
CTY ProcId ProcTyp MaxProcDate ZZZ 23-248 ЗАГРУЗИТЬ 2023-11-08T16:43:35 Мой текущий код на C#:
var resListMax = resListAll .GroupBy(c => новый {c.CTY, c.ProcId}) .Select(g => новый { г.Ключ.CTY, g.Key.ProcId, MaxProcDate = g.Max(row => row.ProcDate), }) .OrderBy(x => x.CTY).ThenBy(x => x.ProcId) .К списку(); Я просматривал примеры, но так и не понял, где мне следует поставить групповую фильтрацию? Я чувствую, что этот пост — это то, что я хочу, но не знаю, как это реализовать. Любая помощь приветствуется.
У меня возникли проблемы с настройкой лямбды для исключения групп с записью, в которой есть поле со значением. Пример моих данных:
CTY ProcId ProcTyp ProcDate ZZZ 23-015 ИНИЦИТ 2023-01-26T20:04:30 ZZZ 23-015 ОБНОВЛЕНИЕ 26.01.2023T20:04:45 ZZZ 23-015 ЗАГРУЗИТЬ 2023-01-26T20:05:00 ZZZ 23-015 ЗАГРУЗИТЬ 31.05.2023T15:12:01 ZZZ 23-015 УДАЛИТЬ 25.07.2023T12:28:38 ZZZ 23-246 ИНИТ 2023-11-07T23:31:09 ZZZ 23-246 УДАЛИТЬ 2023-11-08T16:49:55 ZZZ 23-248 ИНИТ 2023-11-08T16:40:18 ZZZ 23-248 ОБНОВЛЕНИЕ 2023-11-08T16:43:14 ZZZ 23-248 ЗАГРУЗИТЬ 2023-11-08T16:43:35 Я хочу сгруппировать данные по CTY, а затем по ProcId, а затем получить MAX ProcDate. Однако те группы, которые имеют 1 или более ProcTyp = 'DELETE', должны быть исключены из группировки. Я не просто хочу отфильтровать эти записи, а отфильтровать ГРУППЫ, в которых есть эти записи. В этом случае результатом должен быть список:
CTY ProcId ProcTyp MaxProcDate ZZZ 23-248 ЗАГРУЗИТЬ 2023-11-08T16:43:35 Мой текущий код на C#:
var resListMax = resListAll .GroupBy(c => новый {c.CTY, c.ProcId}) .Select(g => новый { г.Ключ.CTY, g.Key.ProcId, MaxProcDate = g.Max(row => row.ProcDate), }) .OrderBy(x => x.CTY).ThenBy(x => x.ProcId) .К списку(); Я просматривал примеры, но так и не понял, где мне следует поставить групповую фильтрацию? Я чувствую, что этот пост — это то, что я хочу, но не знаю, как это реализовать. Любая помощь приветствуется.
Мобильная версия