2

以下の式が見つかったすべての要素を2つの異なるリストから抽出する方法

List1.id = List2.id && List1.CategoryId = list2.CategoryId

メインリストにない要素を抽出して逆を行う方法

!(List1.id = List2.id && List1.CategoryId = list2.CategoryId)
4

3 に答える 3

3

IComparerデータの種類に合わせて簡単に実装して使用できます

 var intersection = List1.Intersect(List2, myCategoryIdComparer);

 var notRepeating = List1.Union(List2).Except(intersection);

 var notInList1 = List2.Except(List1, myCategoryIdComparer);

簡単に実装IComparerできます:

 public class CategoryComparer : IComparer  { 
          int IComparerList1.CompareIntersect( Object x, Object y )  {
          // do some type checks to make sure both are CategoryObject
          return ((CategoryObject)x).CategoryID
              .Compare(((CategoryObject)y).CategoryIdmyCategoryIdComparer);
      } 
  }
于 2013-01-10T16:19:37.010 に答える
2

句を使用することもできますがjoin、多くの匿名型を初期化する必要があります。

var result = (from l1 in list1
              join l2 in list2 on new {l1.Id, l1.Category} 
              equals new {l2.Id, l2.Category}
              select l1).ToArray();
于 2013-01-10T16:27:27.097 に答える
2

したがって、最初のケースは、JoinLinq がサポートする基本的な操作です。

var matchingItems = from item1 in list1
            join item2 in list2
            on new{ item1.id, item1.CategoryId} 
            equals new{ item2.id, item2.CategoryId}
            select new { item1, item2 };

2 番目のケースの場合:

var idValues = list2.Select(item => new { item.id, item.CategoryId })
    .ToHashSet();
var missingItems = list1.Where(item => !idValues.Contains(new { item.id, item.CategoryId }));

の定義は次のToHashSetとおりです。

public static class Extensions
{
    public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
    {
        return new HashSet<T>(source);
    }
}
于 2013-01-10T16:31:41.963 に答える