C# C组由一个列表包含另一个类

C# C组由一个列表包含另一个类,c#,linq,linq-group,C#,Linq,Linq Group,我有两门课,如下所示: public class result { public person identity { get; set; } } public class person { public string name { get; set; } public string family { get; set; } } class Program { static void Main(string[] args) { pers

我有两门课,如下所示:

public class result
{
    public person identity { get; set; }
}

public class person
{
    public string name { get; set; }

    public string family { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        person p1 = new person();
        p1.name = "Bill"; p1.family = "Gates";
        person p2 = new person();
        p2.name = "Satoshi"; p2.family = "Nakamoto";
        person p3 = new person();
        p3.name = "AmirAli"; p3.family = "Sam";

        List<result> lst = new List<result>();
        List<List<result>> lstGrp = new List<List<result>>();

        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p3 });
        lst.Add(new result { identity = p3 });
        lst.Add(new result { identity = p3 });

        lstGrp = lst
            .GroupBy(r => r.identity)
            .Select(grp => grp.ToList())
            .ToList();

        foreach (List<result> list in lstGrp)
        {
            foreach (result item in list)
            {
                Console.WriteLine(item.identity.name + " " + item.identity.family);
            }
        }
    }
}
我有一些重复数据的列表。我想通过System.Linq.GroupBy消除重复数据

我搜索了很多,我认为我找到的最好答案是,所以我模拟了我的代码,如下所示:

public class result
{
    public person identity { get; set; }
}

public class person
{
    public string name { get; set; }

    public string family { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        person p1 = new person();
        p1.name = "Bill"; p1.family = "Gates";
        person p2 = new person();
        p2.name = "Satoshi"; p2.family = "Nakamoto";
        person p3 = new person();
        p3.name = "AmirAli"; p3.family = "Sam";

        List<result> lst = new List<result>();
        List<List<result>> lstGrp = new List<List<result>>();

        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p1 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p2 });
        lst.Add(new result { identity = p3 });
        lst.Add(new result { identity = p3 });
        lst.Add(new result { identity = p3 });

        lstGrp = lst
            .GroupBy(r => r.identity)
            .Select(grp => grp.ToList())
            .ToList();

        foreach (List<result> list in lstGrp)
        {
            foreach (result item in list)
            {
                Console.WriteLine(item.identity.name + " " + item.identity.family);
            }
        }
    }
}
如图所示,我在不同的结果中有重复的人,但我希望在控制台中看到每个人一次,如下所示:

但我最终面对的是:

如何更改代码以获得所需的结果


非常感谢。

我认为您真正想要的是与众不同的,而不是群居。 看这里

他们对distinct的看法:

返回序列中不同的元素

例如:

person p1 = new person();
p1.name = "Bill";
p1.family = "Gates";

person p2 = new person();
p2.name = "Satoshi";
p2.family = "Nakamoto";

person p3 = new person();
p3.name = "AmirAli";
p3.family = "Sam";

List<result> lst = new List<result>();
List<person> lstGrp = new List<person>();
lst.Add(new result{identity = p1});
lst.Add(new result{identity = p1});
lst.Add(new result{identity = p1});
lst.Add(new result{identity = p2});
lst.Add(new result{identity = p2});
lst.Add(new result{identity = p2});
lst.Add(new result{identity = p3});
lst.Add(new result{identity = p3});
lst.Add(new result{identity = p3});

lstGrp = lst.Select(r => r.identity).Distinct().ToList();
foreach (var item in lstGrp)
{
    Console.WriteLine(item.name + " " + item.family);
}

您将所有姓名和家庭分配给同一变量p1

person p1=新的person;p1.name=票据;p1.家庭=门;人员p2=新人员;p1.name=佐藤;p1.家庭=中本;人员p3=新人员;p1.name=阿米拉利;p1.家庭=Sam;这是打字错误吗?仅将“名称和族”设置为p1Person@demo真的很抱歉!复制粘贴的缺点!但我仍然有这个问题,我在另一个项目中做了,但仍然没有工作,所以我模拟了我的项目,如图所示。谢谢。代码中唯一真正的问题是,您正在迭代组集合中的每个列表,而您可以只迭代组集合并显示键。有关正确的方法,请参见复制。也就是说,我会注意到,您可能会遇到的下一个问题是,虽然上面的方法可以很好地用于分组,但这只是因为您对使用同一个人的每个结果使用相同的实例。。。。。。很可能在现实世界中,您会有多个使用相同值的person实例,并且希望实现IEquatable以便按预期方式分组。真的很抱歉!复制粘贴的缺点!但我仍然有这个问题,我在另一个项目中做了,但仍然没有工作,所以我模拟了我的项目,如图所示。thanks@AkshayGaonkar你认为单子更好吗?