c#linq列出属性和分组依据

时间:2018-08-16 19:19:17

标签: c# linq group-by

给出以下示例代码:

var item1 = ("Test1", new List<string>() { "1", "2", "3" });
var item2 = ("Test2", new List<string>() { "1", "2", "3" });
var item3 = ("Test3", new List<string>() { "1", "2", "3" });

var _list = new List<(string ID, List<string> Items)>
{
    item1,
    item2,
    item3
};

var groupby = _list.GroupBy(x => x.Items);

当您在此处调用GroupBy时,由于“项”的列表都相同,为什么结果不是单个组?

1 个答案:

答案 0 :(得分:1)

因为列表包含相同顺序的相同元素并不意味着它们相同。对于两个列表,默认的相同定义是它们是否具有相同的引用,即它们是否指向内存中的同一对象。

您有三个不同的引用指向三个不同的对象。

如果您想覆盖此行为并重新定义“相同”的含义,则可以为List<string>实现IEqualityComparer,以检查两个列表是否包含相同顺序的相同元素。并将比较器提供给GroupBy