辞書を返すLINQクエリ<string、string>


218

LINQを使用してクエリを実行して個別の値を取得し、結果としてDictionary <string、string>を取得するMyClassのコレクションがありますが、自分より簡単にそれを行う方法を理解できません以下に行っています。私の結果としてDictionary <string、string>を取得するために使用できる、よりクリーンなコードは何でしょうか?

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

var queryResults = (from MyClass mc in myClassCollection
                    orderby bp.SomePropToSortOn
                    select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct();

foreach (var item in queryResults)
{
    desiredResults.Add(item.Key.ToString(), item.Value.ToString());
}

6
重複するキーをどのように処理しますか?ただ最初のものを取り、その後のものを無視しますか?辞書は順序付けされていないため、クエリでの順序付けは効果がないことに注意してください...
Jon Skeet

1
たぶんあなたが探しているのは、IDictionaryのSortedDictionary実装です。それ以外の場合、辞書での並べ替えは無意味です。
Fede

回答:


366

ToDictionaryメソッドを直接使用します。

var result = 
  // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
  // show how to use OrderBy in a LINQ query
  myClassCollection.OrderBy(mc => mc.SomePropToSortOn)
                   .ToDictionary(mc => mc.KeyProp.ToString(), 
                                 mc => mc.ValueProp.ToString(), 
                                 StringComparer.OrdinalIgnoreCase);

1
Mehrdad、これについてのポインタをありがとう。これは私が行っていた方向でしたが、ToDictionaryの正しいオーバーロードを見落としていたに違いありません。
Scott Ivey

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.