LINQ конвертировать из IGrouping в поиск

У меня есть две переменные типа ILookup. Я хотел использовать Union или Concat, чтобы объединить их значения и присвоить результат третьей переменной того же типа. И Union, и Concat возвращают IGrouping. Это должно быть очень просто конвертировать IGrouping в ILookup, но я просто не могу этого сделать!!!:-( IGrouping предоставляет только ключ, поэтому я борюсь со вторым параметром Lookup.... Любая помощь будет очень, очень ценится.

1 ответ

Решение

Я думаю, что вам нужно сначала сгладить последовательности, чтобы использовать ToLookup:

var lookup = first.Concat(second)
                  .SelectMany(group => group,
                              (group, item) => new { Key = group.Key, 
                                                     Item = item })
                  .ToLookup(x => x.Key, x => x.Item);

Это использует форму SelectMany который принимает двух делегатов: один для преобразования элемента в исходной последовательности в коллекцию, а другой для получения элемента в исходной коллекции (т. е. группы) и элемента в возвращенной коллекции (т. е. элементов, соответствующих ключу этой группы) в добраться до элемента результата. Это самый простой (я думаю!) Способ объединения группы в последовательность элементов с их ключами.

Выше не проверено, поэтому может быть совершенно неправильно. Это также относительно неэффективно... обидно, что нет никакого способа создать экземпляр Lookup непосредственно. Вы могли бы реализовать ILookup себя, конечно.

Другие вопросы по тегам