比较两个列表最简单的方法是什么?

时间:2016-10-10 08:42:08

标签: c# linq list

使用C#,我有一个对象列表和一个int列表。例如,我有一个事件列表,每个事件都有一个eventId。

我想将事件列表与整数列表进行比较,并删除其ID出现在整数列表中的所有对象。所以,例如,我有一个像这样的对象列表:

Event Id     Event Name
1            Event1
2            Event2
3            Event3

并且我的int列表包含1和3.所以我想删除Event1和Event3,留下我唯一的Event2。这样做的最佳方法是什么?

我也想反向做。所以我还想得到一个没有出现在对象列表中的整数列表。所以我有一个没有出现在整数列表中的事件列表,然后我会有一个未出现在对象列表中的整数列表。

现在看来,我正在使用多个foreach和if语句,而且效率似乎非常低效,这是一些应该更容易的代码。我知道使用linq可能是可行的,但我还在学习并且还没有完全掌握linq。

1 个答案:

答案 0 :(得分:5)

正如您猜测的那样,您可以使用LINQ。您有一个事件列表,您希望在第二个列表中获取id存在的那些事件。

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

相反:

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

请注意,这会创建一个包含结果的新列表,但不会修改列表。我建议使用LINQ方法,但如果你真的想这样做,可以在List<T>上使用RemoveAll方法并传递类似的谓词:

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