我有一个从外部应用程序返回的人员列表,并且我正在本地应用程序中创建一个排除列表,以便我可以选择手动从列表中删除人员。
我有一个我创建的复合键,它对两者都是通用的,我想找到一种使用我的列表从我的列表中删除人员的有效方法
e.g
class Person
{
prop string compositeKey { get; set; }
}
class Exclusions
{
prop string compositeKey { get; set; }
}
List<Person> people = GetFromDB;
List<Exclusions> exclusions = GetFromOtherDB;
List<Person> filteredResults = People - exclustions using the composite key as a comparer
我认为 LINQ 是执行此操作的理想方法,但在尝试连接、扩展方法、使用收益等之后,我仍然遇到麻烦。
如果这是 SQL 我会使用not in (?,?,?)
query.
看看Except http://msdn.microsoft.com/en-us/library/bb336390.aspx方法,您可以这样使用:
var resultingList =
listOfOriginalItems.Except(listOfItemsToLeaveOut, equalityComparer)
您将需要使用我链接到的重载,它允许您指定自定义 IEqualityComparer。这样您就可以根据复合键指定项目如何匹配。 (不过,如果您已经重写了 Equals,则不需要 IEqualityComparer。)
Edit:由于您似乎正在使用两种不同类型的类,因此这是另一种可能更简单的方法。假设一个List<Person>
called persons
and a List<Exclusion>
called exclusions
:
var exclusionKeys =
exclusions.Select(x => x.compositeKey);
var resultingPersons =
persons.Where(x => !exclusionKeys.Contains(x.compositeKey));
换句话说:从排除中仅选择键,然后从人员中选择所有人员对象don't拥有这些钥匙中的任何一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)