为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个列表中删除项目

从另一个列表中删除项目

交互式爱情 2019-10-17 14:44:06
我试图弄清楚如何遍历要从另一个项目列表中删除的项目的一般列表。假设我有一个假设的例子List<car> list1 = GetTheList();List<car> list2 = GetSomeOtherList();我想用一个foreach遍历list1并删除List2中也包含的List1中的每个项目。我不太确定该怎么做,因为foreach不是基于索引的。
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

您可以使用Except:


List<car> list1 = GetTheList();

List<car> list2 = GetSomeOtherList();

List<car> result = list2.Except(list1).ToList();

您甚至可能不需要这些临时变量:


List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();

请注意,Except这不会修改任何一个列表-它会使用结果创建一个新列表。


查看完整回答
反对 回复 2019-10-17
?
心有法竹

TA贡献1866条经验 获得超5个赞

您不需要索引,因为List<T>该类允许您通过值而不是通过使用Remove函数来删除项。


foreach(car item in list1) list2.Remove(item);


查看完整回答
反对 回复 2019-10-17
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

在我的情况下,我有两个不同的列表,具有相同的标识符,有点像外键。“ nzrytmn”引用的第二个解决方案:


var result =  list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();

是最适合我的情况的一种。我需要加载没有已注册记录的DropDownList。


谢谢 !!!


这是我的代码:


t1 = new T1();

t2 = new T2();


List<T1> list1 = t1.getList();

List<T2> list2 = t2.getList();


ddlT3.DataSource= list2.Where(s => !list1.Any(p => p.Id == s.ID)).ToList();

ddlT3.DataTextField = "AnyThing";

ddlT3.DataValueField = "IdAnyThing";

ddlT3.DataBind();


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 395 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信