Я пытаюсь использовать LINQ для создания Dictionary<string, List<CustomObject>>
из List<CustomObject>
. Я могу заставить это работать, используя "var", но я не хочу использовать анонимные типы. Вот что у меня
var x = (from CustomObject o in ListOfCustomObjects
group o by o.PropertyName into t
select t.ToList());
Я также Cast<>()
однажды попробовал использовать библиотеку LINQ x
, но у меня возникают проблемы с компиляцией, из-за того, что это неверное приведение.
linq
dictionary
Atari 2600
источник
источник
var
не использует «анонимный» тип, он использует «неявный» тип. Анонимные типы - это новые классы, созданные компилятором для обработки конструкцииnew { thing = "stuff" };
. Неявные типы являются существующими классами,var
это просто удобный способ ссылаться на них, когда переменная присваивается немедленно, тип переменной может быть выведен из типа объекта, который ему назначен. Вы даже можете неявно ввести переменную, ссылающуюся на анонимный тип, а именно:var a = new { thing = "stuff" };
Ответы:
источник
.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())
Это может быть частью расширения библиотеки Linq. так что нам остается только сделать.ToDictionary(o=>o.PropertyName)
ToDictionary
наToLookup
.Я не могу комментировать @Michael Blackburn, но, думаю, вы поняли, потому что GroupBy в этом случае не нужен.
Используйте это как:
Кроме того, я видел, как это работает лучше, чем при использовании GroupBy (). ToDictionary ().
источник
Для @ atari2600 вот как будет выглядеть ответ при использовании ToLookup в лямбда-синтаксисе:
По сути, он берет IGrouping и материализует его для вас в словарь списков со значениями PropertyName в качестве ключа.
источник
ToLookup
имеет перегрузку, которая сделает работу.Следующее сработало для меня.
источник