无法从具有Linq的另一个列表中排除包含的项目
我有两个自定义类型列表“客户端”。我必须合并这两个列表,避免可能的重复。无法从具有Linq的另一个列表中排除包含的项目,linq,list,Linq,List,我有两个自定义类型列表“客户端”。我必须合并这两个列表,避免可能的重复。 我通过Linq尝试了IEnumerable.Except()方法和“NOT IN”语句,但返回的列表仍然包含其他列表中包含的元素: var dupes = getFirstList().ToList(); //List<Client> var search = getUsersList().Cast<Client>().ToList(); //List<Client> //The
我通过Linq尝试了IEnumerable.Except()方法和“NOT IN”语句,但返回的列表仍然包含其他列表中包含的元素:
var dupes = getFirstList().ToList(); //List<Client>
var search = getUsersList().Cast<Client>().ToList(); //List<Client>
//The returned items are the same as in original dupes list
var unique = dupes.Except(search).ToList();
//No records are returned, even if debugging I can see that same contactId is in both lists
var u = from k in normalSearch
where !(from d in dupes
select d.ContactId)
.Contains(k.ContactId)
select k;
var dupes=getFirstList().ToList()//列表
var search=getUsersList().Cast().ToList()//列表
//返回的项目与原始重复列表中的项目相同
var unique=dupes.Except(search.ToList();
//即使我可以看到两个列表中都有相同的contactId,也不会返回任何记录
var u=在normalSearch中从k开始
哪里(来自重复的d)
选择d.联系人ID)
.包含(k.联系人ID)
选择k;
为什么我无法匹配这两个列表以删除重复项
编辑:
对于Exception方法,我想我必须实现接口IEquatable,以使其能够与自定义类型一起工作。但是在LINQ语句的情况下,我仍然无法理解为什么不返回任何记录,因为在这种情况下“ContactId”字段是int。除非使用这种方法来检查引用是否相等,所以这些对象是否具有相同的
ContactId
或任何其他字段都无关紧要。(在您的代码中,您使用的是normalSearch
变量,但没有定义该变量)对于linq部分(与Except相比速度较慢),您可以尝试一些方法
from k in search
where !dupes.Any(d => d.ContactId == k.ContactId)
select k;
考虑到Linq声明,在这种情况下它应该可以工作。知道为什么不返回任何数据吗?这应该是一个正常的Linq列表查询。它可以工作,谢谢!我认为在Linq中,我可以“自动”迭代通过集合的项,而无需使用任何()方法。