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
себя, конечно.