簡體   English   中英

刪除不再收藏的物品的最佳方法

[英]Best way to remove items which are not anymore in collection

我的數據庫中有一個經典的訂購商品:

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; }
}

如您所見,此項目具有ORDER_DETAIL的集合。 在我的項目中,我想保存對訂單所做的修改,並僅保留當前訂單的詳細信息 所以我這樣做:

public void SaveOrderModifications(ORDERS _orderToReceive)
{
    using (mDb = new DatabaseEntity())
    {
        mDb.Database.Connection.Open();

        var orderQry = from o in mDb.ORDERS
                       where o.ORDER_IDE == _orderToReceive.mOrderID
                       select o;

        ORDERS originalOrder = orderQry.FirstOrDefault();

        if (originalOrder == null)
        {
            throw new Exception("Invalid operation");
        }

        mDb.Entry(originalOrder).CurrentValues.SetValues(_orderToReceive);

        mDb.SaveChanges();
    }
}

因此,如果我的原始訂單有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對象,但我仍在尋找一種更優雅/更好的處理方法。

通常,我會以與您執行操作相同的方式進行操作,但是會檢查該項目是否在新項目上,並且僅添加和刪除更改的項目。 因為您可以使用Linq表達式,所以它增加了一些優雅。

效果:

foreach (var orderDetail in originalOrder.ORDER_DETAIL.Where(d => !newOrder.ORDER_DETAIL.Contains(d)).ToList())
{
    mDb.ORDER_DETAIL.Remove(orderDetail);

    mDb.SaveChanges();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM