检查List值是否与另一个列表中的列表值匹配

时间:2014-02-03 20:59:55

标签: c# list

我有2个列表 - 我需要查看一个列表属性中的值是否存在于第二个列表的列表属性中。我尝试了下面的代码,但它没有编译。 “不能隐式地将类型'字符串'转换为'bool'” - 我想我应该使用'包含'但我不是100%

if(MyGlobals.ListOfItemsToControl.Any(x => x.sItemName == MyGlobals.lstNewItems.Any(y => y.sItemName))) 
{
...
}

3 个答案:

答案 0 :(得分:9)

if(MyGlobals.ListOfItemsToControl.Any
     (x => MyGlobals.lstNewItems.Any(y => y.sItemName == x.sItemName))) 
{
...
}

答案 1 :(得分:2)

另一种选择

if(MyGlobals.ListOfItemsToControl.Join(
    MyGlobals.lstNewItems, 
    x => x.sItemName, 
    y => y.sItemName, 
    (x, y) => x).Any()) 
{
...
}

答案 2 :(得分:1)

为什么不使用Intersect

if(MyGlobals.ListOfItemsToControl.Select(x => x.sItemName)
    .Intersect(MyGlobals.lstNewItems.Select(y => y.sItemName)).Any())
{
    // ...
}

你还可以提供一个IEqualityComparer来执行你的对象之间的任何比较,这可能会使这个代码更整洁 - 特别是如果不仅仅是简单的字符串比较。