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

C#中如何基于int比较点创建含另一列表缺失元素的列表

解决方法

首先修正你获取List B的代码——你重复定义了同名变量,正确写法应该是:

// 直接从数据库获取并转换为List,避免变量重复定义
List<ListB> listB = db.ListB.ToList();

接下来分三步实现你的需求:

  1. 从Session取出List A并做安全处理
    由于Session存储的是object类型,需要先转换为对应的列表类型,同时处理空值避免报错:

    // 假设List A是List<ListB>类型,替换成你实际的类型
    List<ListB> listA = Session["ListA"] as List<ListB> ?? new List<ListB>();
    

    这里用??运算符,如果Session中没有存ListA或者值为null,就创建一个空列表,保证后续操作不会触发空引用异常。

  2. 提取List A中用于比较的int属性值
    把List A里所有元素的目标int属性(比如Id)提取出来,存到HashSet<int>中——这种集合的查找效率远高于普通List,适合做批量存在性判断:

    // 替换Id为你实际用来比较的int类型属性名(比如Code、Key等)
    HashSet<int> listAComparisonValues = new HashSet<int>(listA.Select(item => item.Id));
    
  3. 筛选List B中List A缺失的元素,得到List C
    用LINQ筛选出List B中,目标int属性不在上面的HashSet里的元素,就是你要的List C:

    List<ListB> listC = listB.Where(item => !listAComparisonValues.Contains(item.Id)).ToList();
    

特殊情况处理

如果你的List A本身就是存储int值的集合(而非ListB对象),代码可以简化:

List<int> listA = Session["ListA"] as List<int> ?? new List<int>();
HashSet<int> listAComparisonValues = new HashSet<int>(listA);
List<ListB> listC = listB.Where(item => !listAComparisonValues.Contains(item.Id)).ToList();

内容的提问来源于stack exchange,提问作者Thomas Storandt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:25:21