我目前正在开发一个 ASP.NET 的MVC 4.5应用程序。我使用实体框架 6。
我想比较 2 个列表,并使用实体框架 6 向我的集合添加/删除差异。我正在寻找一种从当前列表中获取新项目并随后将它们添加到原始列表的方法。我的 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)
会给你一个A中而不是B中的所有内容的列表B.Except(A)
,反之亦然。使用 A.Intersect(B)
将为您提供 A 和 b 中的所有内容。
在你的具体情况中(感谢@stuartd指出(,你需要一个 EqualComparer(所以如果你还没有这样做,就实现一个IEqualityComparer<Delivery>
(用于Delivery
;你可以使用允许你指定相等比较器的重载(Except()
和Intersect()
(。
除了 EqualityComparer,您还可以覆盖Delivery
类中的GetHashCode()
和Equals()
。
使用这个
var list = currentList.Except(originalList).ToList();