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

1 c# linq

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

1 2 3 3 3 4 5 6 6 6 7 7
Run Code Online (Sandbox Code Playgroud)

我必须像这样对它们进行分组:

listOfUniqe = {1,2,4,5}
listOfDuplicates1 = {3,3,3}
listOfDuplicates2 = {6,6,6}
listOfDuplicates3 = {7,7}
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用不同的,与First(). 但这使我第一次出现并删除重复项。如果对象有重复项,我也想删除第一次出现的对象并将它们移动到另一个列表。

List<Reports> distinct = new List<Reports>;
distinct = ArrayOfObjects.GroupBy(p => p.Number).Select(g => g.First()).ToList();
Run Code Online (Sandbox Code Playgroud)

任何想法我怎么能做到这一点?

Mar*_*zek 5

要获得只有一个元素的组,请使用:

distinct = ArrayOfObjects.GroupBy(p => p.Number)
                         .Where(g => g.Count() == 1)
                         .ToList();
Run Code Online (Sandbox Code Playgroud)

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

nonDistinct = ArrayOfObjects.GroupBy(p => p.Number)
                            .Where(g => g.Count() > 1)
                            .Select(g => g.ToList())
                            .ToList();
Run Code Online (Sandbox Code Playgroud)