.NET имеет способ проверить если Список содержание всех объектов в Списке b?

Я сделал это для слияния новых объектов в набор без дубликатов, оно берет два набора и возвращает все объекты с любыми дубликатами

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>();

, он возвратит дубликаты

91
задан CompanyDroneFromSector7G 15 January 2015 в 12:18
поделиться

1 ответ

Если вы используете .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();
    }
}
166
ответ дан 24 November 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: