【发布时间】:2017-01-25 20:14:44
【问题描述】:
我有以下课程
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int CategoryId { get; set; }
public int SectionId { get; set; }
public string VendorName { get; set; }
}
public class ProductToRemove
{
public int CategoryId { get; set; }
public int SectionId { get; set; }
}
我主要列出了这两个类,如下所示。
List<Product> Products = new List<Product>()
{
new Product() { Id = 1, Name = "A", CategoryId = 11, SectionId = 6, VendorName = "ABC" },
new Product() { Id = 2, Name = "B", CategoryId = 21, SectionId = 6, VendorName = "ABC" },
new Product() { Id = 3, Name = "C", CategoryId = 13, SectionId = 8, VendorName = "ABC" },
new Product() { Id = 4, Name = "D", CategoryId = 90, SectionId = 6, VendorName = "ABC" },
new Product() { Id = 5, Name = "E", CategoryId = 25, SectionId = 9, VendorName = "ABC" },
};
List<ProductToRemove> ProductsToRemove = new List<ProductToRemove>()
{
new ProductToRemove() {CategoryId = 11, SectionId = 6, },
new ProductToRemove() {CategoryId = 90, SectionId = 6, }
};
我想从 Products 实例中删除 CategoryId 和 SectionId 与 ProductsToRemove 集合中的内容相匹配的任何内容。我知道如何遍历 Products 集合并删除匹配的记录,但我想知道是否有办法使用 Linq 来做同样的事情
【问题讨论】:
-
LINQ 也会使用循环——这不是魔法。事实上,在这里使用 LINQ(使用
GroupBy/Except或你有什么)会导致效率低于循环自己。如果列表是在(CategoryId, SectionId)上排序的,那么更有效的算法是可能的——但当然排序本身会消耗时间。