c# - 使用 LINQ 根据项目在另一个列表中的存在来过滤项目列表

标签 c# .net linq .net-3.5

我正在尝试通过实践来学习 LINQ。这似乎是我应该能够使用它的情况,但我不太清楚这是否可能,或者我是否找错了树。

在给定以下用例的情况下,我可以使用单行 LINQ 查询实现方括号 [] 中的内容吗?

List<Command> list1, list2;

PopulateCommandLists(list1, list2);

foreach(Command cmd in list1)
{
    if ([cmd.Name is present as the Name in any of list2's Command objects])
    {
        //some code.
    }
}

最佳答案

试试这个:

if (list2.Any(item => item.Name == cmd.Name)) {
}

下面是声明的“剖析”:

  • Any 将其条件应用于 list2 的每个项目,如果返回 true 则返回 true列表中的任何项目
  • Any 中的谓词测试 item 的名称是否等于 cmd 的名称。

您也可以将 if 折叠到 LINQ 中:

foreach (var cmd in list1.Where(c => list2.Any(item => item.Name == c.Name))) {
    ...
}

关于c# - 使用 LINQ 根据项目在另一个列表中的存在来过滤项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11248580/

相关文章:

C# WinForms ShowDialog() 调用任意方法

c# - Linq中的 "SELECT SYSTEM_USER"相当于什么

c# - 使用 LINQ to dictionary 新建字典

C# 夏令时 DateTime 开关

c# - C# 中的 Selenium Web 驱动程序消息验证

c# - 使用 WPF 动画淡出任何控件

c# - 三元运算符中的意外行为

c# - 如何在 LINQ 表达式中使用 group 对字段的子字符串进行分组?

c# - 通过 LINQ 更改此循环?

c# - 消除 C# catch 中的重复代码