C#中如何基于int比较点创建含另一列表缺失元素的列表
解决方法
首先修正你获取List B的代码——你重复定义了同名变量,正确写法应该是:
// 直接从数据库获取并转换为List,避免变量重复定义 List<ListB> listB = db.ListB.ToList();
接下来分三步实现你的需求:
从Session取出List A并做安全处理
由于Session存储的是object类型,需要先转换为对应的列表类型,同时处理空值避免报错:// 假设List A是List<ListB>类型,替换成你实际的类型 List<ListB> listA = Session["ListA"] as List<ListB> ?? new List<ListB>();这里用
??运算符,如果Session中没有存ListA或者值为null,就创建一个空列表,保证后续操作不会触发空引用异常。提取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));筛选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
相关产品推荐
相关产品推荐

