You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ查询检测InfoObject中User数据的重复问题

检测InfoObject中用户跨Type重复的LINQ查询

根据你的需求,我们需要找出同一Code分组下,单个用户对应多种Type的违规情况。以下是两种场景的LINQ实现:

1. 获取所有违规的详细信息

这个查询会返回所有违规的Code、用户名以及对应的多个Type:

// 假设你有InfoObject的集合:List<InfoObject> infoObjects
var duplicateUserEntries = infoObjects
    // 展开每个InfoObject中已选中的用户(Value="1"),关联Code和Type
    .SelectMany(info => info.Users
        .Where(user => user.Value == "1")
        .Select(user => new {
            info.Code,
            info.Type,
            UserName = user.Name
        }))
    // 按【Code+用户名】分组,聚焦同一Code下的单个用户
    .GroupBy(x => new { x.Code, x.UserName })
    // 筛选出对应多个不同Type的分组
    .Where(g => g.Select(x => x.Type).Distinct().Count() > 1)
    // 整理成易读的结果结构
    .Select(g => new {
        Code = g.Key.Code,
        UserName = g.Key.UserName,
        AssociatedTypes = g.Select(x => x.Type).Distinct().ToList()
    })
    .ToList();

2. 仅判断是否存在违规情况

如果只需要知道是否有违规,不需要详情,可以简化为:

bool hasDuplicateUsers = infoObjects
    .SelectMany(info => info.Users
        .Where(user => user.Value == "1")
        .Select(user => new { info.Code, info.Type, UserName = user.Name }))
    .GroupBy(x => new { x.Code, x.UserName })
    .Any(g => g.Select(x => x.Type).Distinct().Count() > 1);

逻辑说明

  1. 扁平化数据:用SelectMany把每个InfoObject中选中的用户(Value="1")拆分成独立条目,每个条目包含Code、Type和用户名。
  2. 分组聚合:按Code和用户名分组,确保我们只关注同一Code下的同一个用户。
  3. 违规判断:检查每个分组内的Type是否有多个不同值,若有则说明该用户在同一Code下对应了多种Type,属于违规。

以你提供的无效案例为例,这个查询会捕捉到Code=XYZ下的John同时关联Type=A和Type=B的情况。


内容的提问来源于stack exchange,提问作者Mark U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:35:02