Ответ 1
Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
.GroupBy(o => o.PropertyName)
.ToDictionary(g => g.Key, g => g.ToList());
Я пытаюсь использовать 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
, но у меня возникают проблемы с компиляцией, поскольку это недействительный листинг.
Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
.GroupBy(o => o.PropertyName)
.ToDictionary(g => g.Key, g => g.ToList());
Я не могу комментировать @Майкл Блэкберн, но я думаю, что вы получили нижний предел, потому что в этом случае GroupBy не нужен.
Используйте его как:
var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName);
var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName]
Кроме того, я видел, как это работает лучше, чем при использовании GroupBy(). ToDictionary().
Для @atari2600 это будет выглядеть так, как использовать ToLookup в синтаксисе лямбда:
var x = listOfCustomObjects
.GroupBy(o => o.PropertyName)
.ToLookup(customObject => customObject);`
В принципе, он принимает IGrouping и материализует его для вас в словарь списков со значениями PropertyName в качестве ключа.