2016-10-10 243 views
1

使用C#,我有一个对象列表和一个整数列表。例如,我有一个事件列表,每个事件都有一个eventId。比较两个列表最简单的方法是什么?

我想将事件列表与整数列表进行比较,并删除ID在整数列表中出现的任何对象。因此,举例来说,我有对象的列表,像这样:

Event Id  Event Name 
1   Event1 
2   Event2 
3   Event3 

和我的整数的名单上有1和3。所以我想删除事件1和EVENT3,留给我唯一的事件2。这样做的最好方法是什么?

我也想做相反的事情。所以我也想得到一个没有出现在对象列表中的整数列表。所以我会列出一些没有出现在整数列表中的事件,然后我会列出一些没有出现在对象列表中的整数。现在看来,我使用了多个foreach和if语句,而且它看起来效率很低,对于应该更容易的东西来说,它是很多代码。我知道这可能是可行的使用LINQ,但我仍然在学习,还没有完全掌握LINQ。

回答

5

正如你猜测的那样,你可以使用LINQ。你有一个事件列表,你想获得这些事件的ID在第二个列表中存在。

var result = listOfEvents.Where(ev => listOfInts.Contains(ev.Id)).ToList(); 

和反向:

var result = listOfEvents.Where(ev => !listOfInts.Contains(ev.Id)).ToList(); 

注意这将创建一个包含您的结果新的列表,它不会修改到位名单。我建议的方法LINQ是优选的,但如果你真的想做到这一点,你可以使用RemoveAll方法上List<T>,并通过类似的断言:

listOfEvents.RemoveAll(ev => listOfInts.Contains(ev.Id)); 
+0

谢谢你,这是完美的。 – necrofish666

+2

根据结果的用途,您可能会考虑不在最后将调用添加到ToList()方法。 LINQ使用了评价。调用ToList()会立即强制执行评估。 –

相关问题