繁体   English   中英

C#Linq EF6,比较2个列表,添加/删除差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM