2

いくつかのデータをList<Dictionary<string, string>>含むオブジェクトがあります。

/* Values in the list will be like
   [0] - 
         aaa - aaaValue1   (Key, Value)
         bbb - bbbValue1
         ccc - cccValue1
         ddd - dddValue1 
   [1] - 
         aaa - aaaValue2   (Key, Value)
         bbb - bbbValue2
         ccc - cccValue2
         ddd - dddValue2 

    and so on */

List<string>キーが「ccc」に等しく、キー「bbb」の値が「bbbValue1」に等しい辞書で個別のvalues()を取得したいと思います。

期待される結果:

キーが「ccc」に等しく、キー「bbb」の値が。の「bbbValue1」に等しいディクショナリ値を含む文字列リストを返しますList<Dictionary<string, string>>

4

3 に答える 3

9

私はあなたが欲しいと思います:

var result = testData.Where(dict => dict.ContainsKey("EmpNo"))
                     .Select(dict => dict["EmpNo"])
                     .Distinct()
                     .ToList();

または、結果をセットとして必要な場合:

var result = new HashSet<string>(from dict in testData       
                                 where dict.ContainsKey("EmpNo")        
                                 select dict["EmpNo"]);        

編集:あなたはあなたの質問を完全に変更しました、それはするのは良いことではありません(代わりに新しい質問をする)が、現在の状態でそれに答える:

var result = testData.Where(dict => dict.ContainsKey("ccc") 
                                 && dict.ContainsKey("bbb")
                                 && dict["bbb"] == "bbbValue1")
                     .Select(dict => dict["ccc"])
                     .Distinct()
                     .ToList()
于 2012-09-18T05:35:39.497 に答える
0

次のようにリストをフラット化する方がよいと思います。

testData.SelectMany(x => x)
        .Where(x => x.Key == "EmpNo")
        .Select(x => x.Value)
        .Distinct()
        .ToList();
于 2012-09-18T05:47:20.777 に答える
0

これで正しい結果が得られると思います。

var result = testData.SelectMany(dict => dict)
                     .Where(dict => dict.Key.Equals("ccc") || (d.Key.Equals("bbb") && d.Value.Equals("bbbValue1")))
                     .Select(d => d.Value).Distinct().ToList();
于 2012-10-04T18:22:39.067 に答える