如何在LINQ Group集合中查找重复项

xxe27gdn  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(98)

我想写一个LINQ查询,检查InfoObject对象中是否有User数据的重复。
在下图中,我想按Code(即XYZ)分组,并检查该组中是否有一个User包含多个Type。User模型包含Name(例如John)和Value(1表示选中)。
我的模型类如下:

public class InfoObject
{
    public string Code { get; set; }
    public string Type { get; set; }
    public List<User> Users { get; set; }
}

public class User
{
    public string Name { get; set; }
    public string Value { get; set; }
}

字符串

**Invalid Case:**John不能同时拥有A和B两种类型

Code          Type          John          Luke          Tim
XYZ           A             1             1             -
XYZ           B             1             -             1

**Valid Case:**每个用户只能有一种类型

Code          Type          John          Luke          Tim
XYZ           A             -             1             -
XYZ           B             1             -             1


什么是正确的LINQ查询来实现这一点?谢谢!

ut6juiuv

ut6juiuv1#

您可以扁平化InfoObject层次结构,然后按用户名分组,并保留具有多个唯一代码的项目:

IEnumerable<InfoObject> data = ...;

var invalidUserNames = data
    // flatten with SelectMany:
    .SelectMany(o => o.Users
        .Where(user => user.Value == "1") // assuming you want to check only "selected"
        .Select(user => (user.Name, Obj: o))) 
    .GroupBy(t => t.Name) // assuming Name uniquely identifies user
    .Select(gr => (Name: gr.Key, Count: gr.Select(t => t.Obj.Code).Distinct().Count()))
    .Where(t => t.Count > 1)
    .Select(t => t.Name)
    .ToArray();

字符串
您可以操作Select,以便只公开最终结果所需的数据。

相关问题