从List <dictionary <string,string =“”>&gt; </dictionary <string,>获取唯一值

时间:2012-09-18 05:31:40

标签: c# .net linq list dictionary

我有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”。

预期结果:

返回一个字符串列表,其中包含字符值,其中key等于“ccc”,并且键“bbb”的值等于List<Dictionary<string, string>>中的“bbbValue1”。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

认为最好像这样压缩列表:

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

答案 2 :(得分: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();