Linq Distinct()或GroupBy()方法在以下方案中不起作用

时间:2015-07-15 07:42:05

标签: c# linq

在下面的代码中,我将多个字典实例捆绑到一个列表中。现在我想从列表中仅选择不同的值。要做到这一点,我尝试使用 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());

2 个答案:

答案 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();