我想编写一个LINQ查询,它将判断我的InfoObject个对象中是否有User个数据重复.

在接下来的插图中,我想按Code(即XYZ)进行分组,并判断对于该组,是否存在具有多个TypeUser.用户模型包含Name(例如,John)和Value(1表示 Select ).

我的模型类如下:

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:约翰不能既有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查询是什么?谢谢!

推荐答案

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

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进行操作,以仅显示最终结果所需的数据.

Csharp相关问答推荐

从WinUI 3中的网络摄像头捕获的旋转图像

如何打印已添加到List的Linq值,而不是C#中的:System.Collections.Generic.List ' 1[System.Int32]?

Elasticsearch:当我try 使用c#将嵌套对象添加到filter中时出现问题

将XPS转换为PDF C#

为什么将鼠标悬停在DateTimeOffset上只显示Hour值?

如何注册接口类型,类型<>

Azure Redis缓存与Entra ID身份验证

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

从另一个不同 struct 的数组创建Newtonsoft.Json.Linq.J数组

EF核心新验证属性`DeniedValues`和`StringCompison`不起作用

在C#中过滤Excel文件

Regex字母数字校验

GODOT 4向C#中的字符串参数发送信号以等待

是否可以将Collectionview中的数组与ObservableCollection绑定?

如何允许数组接受多个类型?

两个DateTimeOffset之间的差异返回意外的负值

忽略Visual Studio代码中的StyleCop规则

Autofac -动态实例化:手动传递构造函数

为什么连接到Google OAuth2后,结果.Credential为空?

如何在.NET MAUI上在iOS和Mac之间共享代码?(no条件编译和无代码重复)