web-dev-qa-db-ja.com

コレクションをグループ化し、辞書を返す

アイテムのコレクション(価格アイテム-各アイテムには金額とコードがあります)を取得し、コードでグループ化してから、キーがアイテムのコードで値がのグループであるIDictionaryを返すメソッドを作成しました。そのコードのアイテム(意味があることを願っています!)

メソッドの実装は次のとおりです。

public IDictionary<string, IEnumerable<PriceDetail>> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails)
{
    // create a dictionary to return
    var groupedPriceDetails = new Dictionary<string, IEnumerable<PriceDetail>>();

    // group the price details by code
    var grouping = priceDetails.GroupBy(priceDetail => priceDetail.Code);

    // foreach grouping, add the code as key and collection as value to the dictionary
    foreach (var group in grouping)
    {
        groupedPriceDetails.Add(group.Key, group);
    }

    // return the collection
    return groupedPriceDetails;
}

次に、これをリファクタリングして、ToDictionaryを次のように使用しようとしました。

// group the price details by code and return
return priceDetails.GroupBy(priceDetail => priceDetail.Code)
                   .ToDictionary(group => group.Key, group => group);

コンパイルしようとすると、string, IGrouping<string, PriceDetail>の辞書からstring, IEnumerable<PriceDetail>の辞書に変換できないというエラーが表示されます。

この方法での最初の試みを正しくリファクタリングする方法を誰かに教えてもらえますか?もっと簡潔な書き方があると思いますが、理解できません!

19
james lewis

どうですか:

public ILookup<string, PriceDetail> GetGroupedPriceDetails(IEnumerable<PriceDetail> priceDetails)
{
     return priceDetails.ToLookup(priceDetail => priceDetail.Code);
}
15
Jakub Konecki

できません:

priceDetails.GroupBy(priceDetail => priceDetail.Code)
               .ToDictionary(group => group.Key, group => group.ToList())
33
bobwah