Я сделал это для слияния новых объектов в набор без дубликатов, оно берет два набора и возвращает все объекты с любыми дубликатами
List<Campaign> nonMatching = (from n in newCampaigns
where !(from e in Existing select e.Id).Contains<int>(n.Id)
select n).ToList<Campaign>();
Теперь путем удаления! для содержит оператор
List<Campaign> nonMatching = (from n in newCampaigns
where (from e in Existing select e.Id).Contains<int>(n.Id)
select n).ToList<Campaign>();
, он возвратит дубликаты
Если вы используете .NET 3.5, это просто:
public class ListHelper<T>
{
public static bool ContainsAllItems(List<T> a, List<T> b)
{
return !b.Except(a).Any();
}
}
Это проверяет, есть ли какие-либо элементы в b
, которых нет в a
- а затем инвертирует результат.
Обратите внимание, что было бы несколько более традиционным сделать метод универсальным, а не класс, и нет причин требовать List
вместо IEnumerable
- поэтому это, вероятно, будет предпочтительнее:
public static class LinqExtras // Or whatever
{
public static bool ContainsAllItems<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
return !b.Except(a).Any();
}
}