2012-09-18 156 views
2

我有List<Dictionary<string, string>>对象,其中包含一些数据。从列表中获取唯一值<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”。

预期结果:

返回一个字符串列表包含字典中值,其中关键是等于“CCC”,并将键“BBB”的值等于“bbbValue1”在List<Dictionary<string, string>>

回答

8

我想你想:

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() 
0

认为这将是更好的拉平名单如下:

testData.SelectMany(x => x) 
     .Where(x => x.Key == "EmpNo") 
     .Select(x => x.Value) 
     .Distinct() 
     .ToList(); 
+0

这将返回IEnumberable 的'序列'不'名单' ..所以你应该在'.Distinct()' –

+0

之后添加'.ToList()'。我的回答后问题发生了变化。 – Dima

+0

@Dima对不起。我只问了一个新问题。但由于倒票,我不得不删除它,所以我修改了这个问题。 –

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(); 
相关问题