У меня есть установка, которая выглядит следующим образом:
CREATE TABLE MessageGrouping(MessageGroupingId bigint IDENTITY(1,1),
StoredMessageId bigint, MessageGroupId bigint)
INSERT INTO [MessageGrouping]([StoredMessageId], [MessageGroupId])
SELECT 1, 301 UNION ALL
SELECT 1, 302 UNION ALL
SELECT 2, 302 UNION ALL
SELECT 3, 303 UNION ALL
SELECT 4, 304 UNION ALL
SELECT 2, 305 UNION ALL
SELECT 6, 305 UNION ALL
SELECT 7, 303
GO
Мне нужно это, чтобы вернуть группы (из StoredMessageId
s), как это:
[1,2,6], [3, 7], [4]
Обновление: Логика для первой группировки выглядит следующим образом: StoredMessageId
1 имеет MessageGroupId
301 и 302 на нем.Но MessageGroupId
302 также имеет StoredMessageId
2.Поэтому StoredMessageId
2 должен быть включен в группу.
Но StoredMessageId
2 также имеет MessageGroupId
305.И MessageGroupId
305 имеет StoredMessageId
6, поэтому он также включен в группу.
Я попробовал это в LinqPad и вышел пустым.Простой MessageGroupings.GroupBy(x=>x.MessageGroupId)
только группирует по MessageGroupId
(как и ожидалось).
Добавление в StoredMessageId
s (MessageGroupings.GroupBy(x=>new {x.MessageGroupId, x.StoredMessageId})
просто помещает каждую строку в свою группу.
Есть лиспособ сделать цепочечную группировку в Linq, как я ищу? Я также в порядке, чтобы сделать это в SQL.
Я хотел бы иметь возможность использовать это в микро ORM, как Dapper , но если мне понадобится Entity Framework, я тоже могу это сделать.