我有2个类Feed_Auto和具有多个匹配属性的Product.对于这个特殊问题,AutoID是我需要使用的唯一字段.
我有一个List< FeedsAuto>有几百个独特的条目.我有一个小的列表<产品>有10个,20个独特的条目.我现在想要从大列表中删除小列表中的所有项目.
如何使用RemoveAll({lambda expression})来完成此任务?我发现的所有示例都取决于通用列表是简单类型(字符串,整数等).
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); }
解决方法
您可以使用Any来简化
source.RemoveAll(a => dropSourceList.Any(b => a.AutoID == b.AutoID));
您可以通过首先创建ID的HashSet来减少循环:
var toRemove = new HashSet<int>(dropSourceList.ConvertAll(a => a.AutoID)); source.RemoveAll(a => toRemove.Contains(a.AutoID));
原文地址:https://www.jb51.cc/c/116759.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。