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

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

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

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

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

textual
Листинг программы
  1. static class LinqExtensions
  2. {
  3.     public static IEnumerable<TResult> FullOuterJoin<TOuter, TInner, TKey, TResult>(
  4.         this IEnumerable<TOuter> outer,                     // "Левая" коллекция
  5.         IEnumerable<TInner> inner,                          // "Правая" коллекция
  6.         Func<TOuter, TKey> outerKeySelector,                // Делегат для выбора ключа "левых" элементов
  7.         Func<TInner, TKey> innerKeySelector,                // Делегат для выбора ключа "правых" элементов
  8.         Func<TKey, TOuter, TInner, TResult> resultSelector, // Делегат для выбора результата
  9.         IEqualityComparer<TKey> keyComparer = null,         // Опциональный comparer для ключа (например, StringComparer.InvariantCultureIgnoreCase для сравнения строк без учета регистра)
  10.         TOuter defaultOuter = default(TOuter),              // Значение "левого" элемента, если таковой не найден
  11.         TInner defaultInner = default(TInner))              // Значение "правого" элемента, если таковой не найден
  12.     {
  13.         keyComparer = keyComparer ?? EqualityComparer<TKey>.Default;
  14.  
  15.         var left = outer.ToLookup(outerKeySelector, keyComparer);
  16.         var right = inner.ToLookup(innerKeySelector, keyComparer);
  17.  
  18.         var distinct = new HashSet<TKey>(from entry in left select entry.Key);
  19.         distinct.UnionWith(from entry in right select entry.Key);
  20.  
  21.         return from key in distinct
  22.                from a in left[key].DefaultIfEmpty(defaultOuter)
  23.                from b in right[key].DefaultIfEmpty(defaultInner)
  24.                select resultSelector(key, a, b);
  25.     }
  26. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут