2016-09-21 1 views
0

私は2つのリストを持っています。 最初のリストからアイテムを削除する必要があるのは、2番目のリストにないアイテムで、最初のリストの他の要素を追加します。リストと組合以外のリスト

foreach (var product in item.Products) 
{ 
    item.Products.Remove(product); 
} 

var newProducts = _catalogService.GetProductBaseItems(x => model.Products.Contains(x.Id)) 
        .ToList(); 

foreach (var product in newProducts) 
{ 
    item.Products.Add(product); 
} 
+3

申し訳ありませんが、私はあなたに従いません。あなたが '[1,2,2,3,3,4]'と '[1,2,4,5]'を持っていると想像してください。ですから、第1リストの '3 'を削除しなければなりません:' [1,2,2,4] 'と、それで何を追加すればいいですか?予想される外出は何ですか? –

答えて

2

あなたはなく、第二の最初にあるそのすべてを見つけるためにEnumerable.Exceptを使用することができます。しかし、あなたのProductクラスは比較することにより、EqualsGetHashCodeを上書きしない場合がありますので、IDのあなたのいずれかの方法次のカスタムIEqualityComparer<Product>または使用を作成し、それをしなければならない。

IEnumerable<int> idsInFirstNotSecond = item.Products 
    .Select(x => x.Id) 
    .Except(newProducts.Select(x => x.Id)); 
var productsInFirstNotSecond = from p in item.Products 
           join id in idsInFirstNotSecond 
           on p.Id equals id 
           select p; 
List<Product> completeListOfOldAndNew = productsInFirstNotSecond 
    .Concat(newProducts) 
    .ToList() 
関連する問題