【发布时间】:2017-05-06 22:33:48
【问题描述】:
我有两个 List 对象,listA 和 listB,其中包含 User 对象的集合。
每个User 对象都有一个属性ID。
我想根据ID 属性获取listA 和listB 中存在的用户列表。
到目前为止,这是我的代码:
listA.Where(a => listB.Any(b => b.ID == a.ID));
有没有更好的方法来做到这一点?感觉它可能效率低下,特别是如果listB 很大。
User 对象没有实现IEquatable。
【问题讨论】:
-
ID 是否唯一?也许可以使用 HashSet 代替 ID 作为键。
-
ID 是唯一的
Guid对象。如果两个User对象具有相同的ID,那么它们是相同的(但不能直接相等)。 -
然后创建两个以 ID 为键的 HashSet,使用您显示的方法但比较键。或者正如其他人指出的那样,
Intersect()可能会更好。尚未对此进行测试,因此仅发表评论。 -
@CodeCaster 我的对象没有实现
IEquatable。这不是您的链接问题的重复。 -
然后创建一个新的
IEqualityComparer<User>并将其传递给Intersect()。同一个问题的那个变体也被问了足够多的时间。另见Using LINQ to objects Intersect and Except on a specific property,