.NET 4.x Сравнение коллекций и последующая модификация - C#

Узнай цену своей работы

Формулировка задачи:

Есть 2 коллекции ObservableCollection<CollectionItem> CollectionOne и ObservableCollection<CollectionItem> CollectionTwo содержащие по 5 айтемов.
public class CollectionItem()
{
   public string Name {get;set;}
   public object SomeData {get;set;}
}
Из второй коллекции удалили один айтем, как синхронизировать 2 коллекции? Т.е. и в первой удалить этот айтем?

Решение задачи: «.NET 4.x Сравнение коллекций и последующая модификация»

textual
Листинг программы
static class LinqExtensions
{
    public static IEnumerable<TResult> FullOuterJoin<TOuter, TInner, TKey, TResult>(
        this IEnumerable<TOuter> outer,                     // "Левая" коллекция
        IEnumerable<TInner> inner,                          // "Правая" коллекция
        Func<TOuter, TKey> outerKeySelector,                // Делегат для выбора ключа "левых" элементов
        Func<TInner, TKey> innerKeySelector,                // Делегат для выбора ключа "правых" элементов
        Func<TKey, TOuter, TInner, TResult> resultSelector, // Делегат для выбора результата
        IEqualityComparer<TKey> keyComparer = null,         // Опциональный comparer для ключа (например, StringComparer.InvariantCultureIgnoreCase для сравнения строк без учета регистра)
        TOuter defaultOuter = default(TOuter),              // Значение "левого" элемента, если таковой не найден
        TInner defaultInner = default(TInner))              // Значение "правого" элемента, если таковой не найден
    {
        keyComparer = keyComparer ?? EqualityComparer<TKey>.Default;
 
        var left = outer.ToLookup(outerKeySelector, keyComparer);
        var right = inner.ToLookup(innerKeySelector, keyComparer);
 
        var distinct = new HashSet<TKey>(from entry in left select entry.Key);
        distinct.UnionWith(from entry in right select entry.Key);
 
        return from key in distinct
               from a in left[key].DefaultIfEmpty(defaultOuter)
               from b in right[key].DefaultIfEmpty(defaultInner)
               select resultSelector(key, a, b);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5