C# 删除不再在收藏中的项目的最佳方法
我的数据库中有一个经典订单项目:C# 删除不再在收藏中的项目的最佳方法,c#,entity-framework,collections,C#,Entity Framework,Collections,我的数据库中有一个经典订单项目: public partial class ORDERS { public ORDERS() { this.ORDER_DETAIL = new HashSet<ORDER_DETAIL>(); } public int ORDER_IDE { get; set; } public string ORDER_STATE { get; set; } public decimal ORDER
public partial class ORDERS
{
public ORDERS()
{
this.ORDER_DETAIL = new HashSet<ORDER_DETAIL>();
}
public int ORDER_IDE { get; set; }
public string ORDER_STATE { get; set; }
public decimal ORDER_TOTAL { get; set; }
public decimal ORDER_TAXES { get; set; }
public decimal ORDER_SHIPPING_COST { get; set; }
public decimal ORDER_HANDLING_COST { get; set; }
public Nullable<System.DateTime> ORDER_SHIPPING_DATE { get; set; }
public string ORDER_BILLING_NAME { get; set; }
public string ORDER_BILLING_ADDRESS { get; set; }
public string ORDER_BILLING_CITY { get; set; }
public string ORDER_BILLING_REGION { get; set; }
public string ORDER_BILLING_COUNTRY { get; set; }
public string ORDER_BILLING_POSTAL_CODE { get; set; }
public string ORDER_SHIPPING_NAME { get; set; }
public string ORDER_SHIPPING_ADDRESS { get; set; }
public string ORDER_SHIPPING_CITY { get; set; }
public string ORDER_SHIPPING_REGION { get; set; }
public string ORDER_SHIPPING_COUNTRY { get; set; }
public string ORDER_SHIPPING_POSTAL_CODE { get; set; }
public string ORDER_COMMENT { get; set; }
public decimal ORDER_DETAIL_AMOUNT { get; set; }
public string ORDER_DESCRIPTION { get; set; }
public decimal ORDER_DISCOUNT { get; set; }
public virtual ICollection<ORDER_DETAIL> ORDER_DETAIL { get; set; }
}
因此,如果我的原始订单有3个项目,而我的新订单有8个项目,并且从这个订单中删除了原始订单的2个项目,我需要做什么才能有效地只保留8个新项目?我是否需要遍历所有这些文件以查看哪些文件存在,哪些文件不再存在
编辑
我找到了一个解决方案,它并不优雅,而且需要一点过程:
foreach (var orderDetail in originalOrder.ORDER_DETAIL.ToList())
{
mDb.ORDER_DETAIL.Remove(orderDetail);
mDb.SaveChanges();
}
foreach (var orderDetail in orderToSave.ORDER_DETAIL)
{
mDb.ORDER_DETAIL.Add(orderDetail);
mDb.SaveChanges();
}
这意味着在添加新的ORDER_DETAIL对象之前,我会刷新所有旧的ORDER_DETAIL对象,但我仍在寻找一种更优雅/更好的方法。通常我会以与您相同的方式进行操作,但我会检查该项是否位于新的ORDER_DETAIL对象上,并且只添加和删除更改的项。它增加了一些优雅,因为您可以使用Linq表达式 大意是:
foreach (var orderDetail in originalOrder.ORDER_DETAIL.Where(d => !newOrder.ORDER_DETAIL.Contains(d)).ToList())
{
mDb.ORDER_DETAIL.Remove(orderDetail);
mDb.SaveChanges();
}
foreach (var orderDetail in originalOrder.ORDER_DETAIL.Where(d => !newOrder.ORDER_DETAIL.Contains(d)).ToList())
{
mDb.ORDER_DETAIL.Remove(orderDetail);
mDb.SaveChanges();
}