加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:00:25 所属栏目:百科 来源:网络整理
导读:我正在尝试通过练习来学习LINQ.这似乎是我应该能够使用它的情况,但我无法弄清楚它是否可能,或者我是否正在咆哮错误的树. 根据下面的用例,我可以使用单行LINQ查询来实现方括号[]中的内容吗? ListCommand list1,list2;PopulateCommandLists(list1,list2);fore
我正在尝试通过练习来学习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(l2c => l2c.Name == cmd.Name))
{ ... }

但是你可以将它添加到foreach并避免代码中的if:

foreach(Command cmd in list1.Where(l1c => list2.Any(l2c => l2c.Name == l1c.Name)))
{
    ... some code ...
}

如果你控制Command类并且可以在其中定义相等(覆盖Equals等),你可以简单地使用Intersect

foreach(var cmd in list1.Intersect(list2))
{ ... }

如果您不控制Command或不想在类中定义相等性,您仍然可以使用Intersect与IEqualityComparer

foreach(var cmd in list1.Intersect(list2,new CommandComparer()))
{ ... }

class CommandComparer : IEqualityComparer<Command>
{ ... }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读