使用C#,我有一个对象列表和一个int列表。例如,我有一个事件列表,每个事件都有一个eventId。
我想将事件列表与整数列表进行比较,并删除其ID出现在整数列表中的所有对象。所以,例如,我有一个像这样的对象列表:
Event Id Event Name
1 Event1
2 Event2
3 Event3
并且我的int列表包含1和3.所以我想删除Event1和Event3,留下我唯一的Event2。这样做的最佳方法是什么?
我也想反向做。所以我还想得到一个没有出现在对象列表中的整数列表。所以我有一个没有出现在整数列表中的事件列表,然后我会有一个未出现在对象列表中的整数列表。
现在看来,我正在使用多个foreach和if语句,而且效率似乎非常低效,这是一些应该更容易的代码。我知道使用linq可能是可行的,但我还在学习并且还没有完全掌握linq。
答案 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));