在下面的代码中,我将多个字典实例捆绑到一个列表中。现在我想从列表中仅选择不同的值。要做到这一点,我尝试使用 distinct和group by ,但这从未帮助过我。任何人都可以帮我选择使用linq的独特方式吗?
IList<Dictionary<string, string>> lst = new List<Dictionary<string, string>>();
Dictionary<string, string> d = new Dictionary<string, string>();
Dictionary<string, string> d1 = new Dictionary<string, string>();
Dictionary<string, string> d3 = new Dictionary<string, string>();
d.Add("12345", "xyz");
d1.Add("12345", "xyz");
d3.Add("123456", "xyz-abc");
lst.Add(d);
lst.Add(d1);
lst.Add(d3);
var result = lst.Distinct(); //test => test.Values.ToString().Trim()); //.Select(grp => grp.First());
答案 0 :(得分:5)
如果你想获得所有字典的distict值,那么你需要比较每个字典中的acctual元素来选择你可以使用的所有元素SelectMany像这样:
键/值对:
var result = lst.SelectMany(x=>x).Distinct();
值:
var result = lst.SelectMany(x=>x.Values).Distinct();
键:
var result = lst.SelectMany(x=>x.Keys).Distinct();
答案 1 :(得分:1)
您必须先从列表中选择值,然后应用Distinct()
:
var values = lst.SelectMany(dict => dict); // or lst.SelectMany(dict => dict.Values), I don't know what kind of values you mean
var distinctValues = values.Distinct();