【发布时间】:2011-09-27 00:58:21
【问题描述】:
我有 2 个类 feeds_Auto 和 Product 具有多个匹配属性。对于这个特殊问题,AutoID 是我需要使用的唯一字段。
我有一个List<FeedsAuto>,其中包含数百个唯一条目。我有一个小的 List<Product> 有 10、20 个 unique 条目。我现在想从大列表中删除小列表中的所有项目。
如何使用 RemoveAll({lambda 表达式}) 来完成此操作?我发现的所有示例都依赖于简单类型(字符串、整数等)的通用列表。
private static int DoInserts(ref List<Model.feeds_Auto> source, ref List<Model.Product> target, Guid companyID)
{
List<Model.Product> newProductList = new List<Model.Product>();
List<Model.Product> dropSourceList = new List<Model.Product>();
using (var db = Helpers.GetProdDB())
{
foreach (var src in source)
{
var tgt = target.Where(a => a.alternateProductID == src.AutoID && a.LastFeedUpdate < src.DateModified).FirstOrDefault();
if (tgt == null)
{
newProductList.Add(new Model.Product{...});
dropSourceList.Add(src);
}
}
db.SaveChanges();
if (dropSourceList.Count > 0)
{
source.RemoveAll(????);
}
}
}
在循环中做到这一点并不难:
foreach (var drop in dropSourceList)
{
source.RemoveAll(a => a.AutoID == drop.AutoID);
}
(对我而言)循环一个集合以在每次传递中为一个项目调用 RemoveAll 是没有意义的。
【问题讨论】:
标签: c# generics collections lambda