2016-09-21 41 views
0

我有两个列表。 我需要从第一个列表中删除项目不在第二个列表中,并添加第一个列表中的其他元素。列表除了和union两个列表

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]''。所以你必须从第一个列表中删除'3':'[1,2,2,4]',那么我应该添加什么?什么是预期的outcoume? –

回答

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