web-dev-qa-db-ja.com

辞書オブジェクトへのLINQ Group By

Dictionary<string, List<CustomObject>>からList<CustomObject>を作成するためにLINQを使用しようとしています。 「var」を使用してこれを機能させることはできますが、匿名型を使用したくありません。これが私が持っているものです

var x = (from CustomObject o in ListOfCustomObjects
      group o by o.PropertyName into t
      select t.ToList());

xを取得したら、LINQライブラリのCast<>()を使用しようとしましたが、無効なキャストであるためにコンパイルの問題が発生します。

144
Atari2600
Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToDictionary(g => g.Key, g => g.ToList());
313

@Michael Blackburnについてコメントすることはできませんが、この場合GroupByは必要ないので、下票を得たと思います。

次のように使用します。

var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName);
var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName]

さらに、これはGroupBy()。ToDictionary()を使用する場合よりもパフォーマンスが優れていることがわかりました。

17
RuudvK