从另一个列表中删除项目
在这个案例中,我有两个不同的列表,它们有一个共同的标识符,类似于外键。
根据"nzrytmn"提到的第二个解决方案:
var result = list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();
这个解决方案最适合我的情况。
我需要加载一个下拉列表,但不包含已经注册过的记录。
谢谢!!!
这是我的代码:
t1 = new T1(); t2 = new T2(); Listlist1 = t1.getList(); List list2 = t2.getList(); ddlT3.DataSource = list2.Where(s => !list1.Any(p => p.Id == s.ID)).ToList(); ddlT3.DataTextField = "AnyThing"; ddlT3.DataValueField = "IdAnyThing"; ddlT3.DataBind();
你没有解释ddlT3是什么。
问题的出现原因:用户想要在一个列表中移除另一个列表中的项目。
解决方法:可以使用Except方法来实现。使用Except方法需要注意的是,它不会修改任何列表,而是创建一个新的列表来存储结果。如果需要返回一个List类型的结果,需要调用ToList()方法。另外,需要添加using System.Linq命名空间。如果使用ArrayList,可以尝试将其转换为List类型。
注意事项:使用Except方法时要小心,因为它实际上执行的是一个集合操作,会使结果列表去重。这可能与使用List而不是HashSet的预期行为不一致。
有一个用户指出,"Remove items from one list in another"并不等同于集合的差集操作,不应该误导其他人接受这个答案。
对于只读属性的情况,上述方法可能不适用,因为需要对集合进行修改。