[英]C# Linq EF6, Compare 2 lists, add/remove difference
我目前正在研究ASP.NET MVC 4.5应用程序。 我使用实体框架6。
我想比较2个列表,并使用Entity Framework 6添加/删除差异到我的集合中。我正在寻找一种从currentList获取新项目并将其添加到originalList之后的方法。 我的C#如下所示:
var originalOffer = MyDb.Offer.First(o => o.OfferId == model.OfferId);
if (originalOffer.OfferData.DeliveryModelPool.Delivery.Count > 0)
{
var currentList = model.DeliveryModelId.Select(x => new Delivery {DeliveryModelId = x}).ToList();
var originalList = originalOffer.OfferData.DeliveryModelPool.Delivery.ToList();
//... originalOffer.OfferData.DeliveryModelPool.Delivery. Add or delete the difference here
}
MyDb.SaveChanges();
您对如何使用EF 6解决此问题有想法吗?
非常感谢!
您可以使用Except()
和Intersect()
; 使用A.Except(B)
会给你一切都在一个不是在B和使用的列表B.Except(A)
反之亦然。 使用A.Intersect(B)
将为您提供A 和 b中的所有内容。
在您的具体情况( 感谢@stuartd指点出来 ),你需要一个EqualityComparer(所以实施IEqualityComparer<Delivery>
如果您还没有这样做的话)的Delivery
; 您可以使用允许您指定equitycomparer( Except()
和Intersect()
)的重载。
除了EqualityComparer,您还可以在Delivery
类中重写GetHashCode()
和Equals()
。
用这个
var list = currentList.Except(originalList).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.