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等),你可以简单地使用 foreach(var cmd in list1.Intersect(list2)) { ... } 如果您不控制Command或不想在类中定义相等性,您仍然可以使用Intersect与 foreach(var cmd in list1.Intersect(list2,new CommandComparer())) { ... } class CommandComparer : IEqualityComparer<Command> { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |