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

如何检测对象列表中指定名称缺失的OBJ ID值?

问题描述

我有两个对象列表:

  • 第一个是Employee列表,数据如下:
IDNAME
1CAT
2DOG
  • 第二个是company列表,数据如下:
NameOBJ ID
CAT500
DOG500
CAT600
DOG600
DOG700

注:第二个列表中的OBJ ID共有500、600、700三个值。

需求:找出第二个列表中CAT缺失的OBJ ID值700(DOG包含全部三个OBJ ID,而CAT仅包含500、600)。


原C#代码(需修正)

List<Employee> e1 = new List<Employee>();
e1.Add(new Employee { Name = "CAT" });
e1.Add(new Employee { Name = "DOG" });

List<company> c1 = new List<company>();
c1.Add(new company { objid="1", cname = "CAT", id = "500" });
c1.Add(new company { objid = "2", cname = "DOG", id = "500"});
c1.Add(new company { objid = "3", cname = "CAT", id = "600" });
c1.Add(new company { objid = "4", cname = "DOG", id = "600" });
c1.Add(new company { objid = "5", cname = "DOG", id = "700" });

var QSOuterJoin = from emp in  e1
                  join add in c1
                  on emp.Name equals add.cname
                  into EmployeeNameGroup
                  from address in EmployeeNameGroup.DefaultIfEmpty()
                  select new  
                        { emp,
                          address };

List<int> uniqlist = new List<int>();
uniqlist.Add(500);
uniqlist.Add(600);
uniqlist.Add(700);

foreach (var i in QSOuterJoin)
{
  foreach (var j in uniqlist)
  {
    if (String.IsNullOrEmpty(i.address?.id))
    {
      Console.WriteLine("{0} is not {1} {2}", i.emp.Name, i.address?.id, j);
    }
  }
}

修正后的C#代码

// 补充实体类定义(原代码遗漏部分)
public class Employee
{
    public string Name { get; set; }
}

public class company
{
    public string objid { get; set; }
    public string cname { get; set; }
    public string id { get; set; }
}

class Program
{
    static void Main()
    {
        List<Employee> e1 = new List<Employee>();
        e1.Add(new Employee { Name = "CAT" });
        e1.Add(new Employee { Name = "DOG" });

        List<company> c1 = new List<company>();
        c1.Add(new company { objid="1", cname = "CAT", id = "500" });
        c1.Add(new company { objid = "2", cname = "DOG", id = "500"});
        c1.Add(new company { objid = "3", cname = "CAT", id = "600" });
        c1.Add(new company { objid = "4", cname = "DOG", id = "600" });
        c1.Add(new company { objid = "5", cname = "DOG", id = "700" });

        // 从company列表动态提取所有唯一OBJ ID,避免硬编码
        var allObjIds = c1.Select(item => item.id).Distinct().ToList();

        foreach (var emp in e1)
        {
            // 获取当前员工已关联的所有OBJ ID
            var empOwnedObjIds = c1.Where(item => item.cname == emp.Name)
                                  .Select(item => item.id)
                                  .ToList();
            // 计算缺失的OBJ ID
            var missingObjIds = allObjIds.Except(empOwnedObjIds);

            foreach (var missingId in missingObjIds)
            {
                Console.WriteLine($"员工{emp.Name}缺失的OBJ ID:{missingId}");
            }
        }
    }
}

代码说明

  1. 动态提取所有唯一OBJ ID:不再手动创建uniqlist,直接从company列表中提取,后续数据更新时无需手动维护。
  2. 对比员工已关联的ID:遍历每个员工,筛选出该员工在company列表中对应的所有OBJ ID。
  3. 找出缺失ID:使用Except方法计算所有全局OBJ ID与员工已关联ID的差集,得到缺失的ID。
  4. 运行结果:会输出员工CAT缺失的OBJ ID:700,完全符合需求。

内容的提问来源于stack exchange,提问作者Pranesh Sankpal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:24