[c#]除了列表和联盟两个列表

标签: Asp.net C#
发布时间: 2017/2/25 3:21:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

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

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);
}

解决方法 1:

您可以使用 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()
赞助商