c# - Linq按唯一值对对象进行分组,并创建两个列表

标签 c# linq

我在其中具有属性Number的对象数组。我需要按值对它们进行分组,即对象包含这些样本值:

1 2 3 3 3 4 5 6 6 6 7 7


我必须像这样将它们分组:

listOfUniqe = {1,2,4,5}
listOfDuplicates1 = {3,3,3}
listOfDuplicates2 = {6,6,6}
listOfDuplicates3 = {7,7}
...


我尝试使用First()与众不同。但是,这使我与众不同,并删除了重复项。如果对象有重复对象,我也想先删除它,然后将其移动到另一个列表中。

List<Reports> distinct = new List<Reports>;
distinct = ArrayOfObjects.GroupBy(p => p.Number).Select(g => g.First()).ToList();


有什么想法可以做到吗?

最佳答案

要获得仅包含一个元素的组,请使用:

distinct = ArrayOfObjects.GroupBy(p => p.Number)
                         .Where(g => g.Count() == 1)
                         .ToList();


要获取具有更多元素的组列表,请使用:

nonDistinct = ArrayOfObjects.GroupBy(p => p.Number)
                            .Where(g => g.Count() > 1)
                            .Select(g => g.ToList())
                            .ToList();

关于c# - Linq按唯一值对对象进行分组,并创建两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15046403/

相关文章:

javascript - 管理 JavaScript 应用程序的时区和 DST 问题

c# - .Net WMI 类 - 我必须处理哪些类?

c# - 使用 LINQ 连接两个表,同时还从第二个表返回空记录

c# - 在 C# 中使用反射自注册工厂

c# - 打开时读取与程序关联的序列化文件

c# - EWS + 交换 2007 : Retrieve inline images

c# - 通过 View 模型构造函数传递的对象实例的理想数量(依赖注入(inject))

c# - 使用 OledbConnection 的 Linq to XML 和 Excel 之间的速度差异?

c# - LINQ 查询不返回任何行

c# - 如何不使用 UserControl.dispose()