如何检查2 observableCollection linq中是否存在项

如何检查2 observableCollection linq中是否存在项,linq,Linq,老林克的车有点生锈了。 如果我有两个收藏,如NewCustomerList和OldCustomerList,看看是否已经有姓氏,我会如何在linq中使用。我相信有很多方法。一个钟声响了很多次,但忘记了怎么做 在一段时间内,我会做类似的事情。linq中的等价物是什么 foreach (var oldCustomer in OldCustomerList) { foreach (var newCustomer in NewCustomerList.Where(x

老林克的车有点生锈了。 如果我有两个收藏,如NewCustomerList和OldCustomerList,看看是否已经有姓氏,我会如何在linq中使用。我相信有很多方法。一个钟声响了很多次,但忘记了怎么做

在一段时间内,我会做类似的事情。linq中的等价物是什么

     foreach (var  oldCustomer in OldCustomerList)
     {
        foreach (var newCustomer in NewCustomerList.Where(x => x.Surname == oldCustomer.Surname))
        {
           break;
        }
     } 

有什么建议吗?非常感谢

那么您正在尝试查看新客户列表中是否有任何旧客户姓氏

一个简单的选项:执行联接并查看它是否为空:

if (OldCustomerList.Join(NewCustomerList, x => x.Surname, x => x.Surname,
                         (x, y) => null).Any())
{
    ...
}
(我使用了空投影,因为我们真的不关心连接结果。)

另一种选择:

var oldSurnames = new HashSet<string>(OldCustomrList.Select(x => x.Surname));
if (NewSurnameList.Any(x => oldSurnames.Contains(x.Surname))
{
    ...
}
var oldnamess=newhashset(oldcustorlist.Select(x=>x.namesh));
if(NewSurnameList.Any(x=>oldNames.Contains(x.姓氏))
{
...
}
我想您可能会发现,您实际上想要的结果是哪些姓氏是共同的……如果您能给我们提供更多的上下文,我们可能会为您提供更多帮助。

您可以通过以下方式来实现:

NewCustomerList.Where(n => OldCustomerList.Any(o => o.Surname == n.Surname))

下面是另一种方法,它也具有
O(n+m)
复杂性+快速传递语义:

OldCustomerList.Select(cust => cust.Surname)
               .Intersect(NewCustomerList.Select(cust => cust.Surname))
               .Any();

在我看来,它比显式的
枚举更具可读性。Join
:“测试旧客户列表中的姓氏投影是否与新客户列表中的姓氏投影有任何共同元素”,这与问题陈述非常接近。

谢谢你的回答。你的例子真的帮助我理解了。以上只是一个简单的例子,我把它放在一起,了解当你想知道另一个集合中是否存在具有特定属性(如姓氏)的项目时,你是如何处理两个集合的。我是否与Se不符有多少?谢谢你的帮助help@user451259:SelectMany可能是对嵌套的foreach代码的非常直接的翻译,但效率很低。如果你明白我的意思的话,这是一种O(n*m)方法,而不是我代码中的O(n+m)方法。这当然是一个很好的选择。我希望有一个“IntersectBy”标准LINQ运算符,因此我们可以只执行
OldCustomerList.IntersectBy(NewCustomerList,x=>x.nam姓氏)
。。。