2017-08-16 65 views
1

我有一個表像這樣:實體框架刪除或添加到匹配列表

庫存表

  • InventoryID(主鍵)
  • 是PersonID(外鍵)
  • CarID(外鍵)

所以在前端它顯示了汽車列表,用戶使用複選框來選擇庫存中的汽車。

如果他們取消選擇車輛並重新選擇它,它將不再具有InventoryID。

最後我會列出一個正確的字段名稱,但我需要數據庫行匹配該列表,方法是從db中刪除不在該列表中的車輛並添加列表中的新車輛,我需要通過PersonID + CarID組合進行檢查,因爲通過取消選擇和重新選擇車輛,InventoryID可能已丟失。

我能想到的唯一辦法做到這將是:

  • 通過它
  • 檢查拉動庫存表和循環每輛車,看它是否是列表
  • 無論是刪除,插入或什麼都不做

但是這個的缺點是每個刪除/插入將是一個新的查詢頂部的查詢來獲取列表本身。我想知道在Entity Framework中是否有一種方法來執行匹配列表或集合等操作。

+0

加你使用 –

+0

我沒有使用任何的代碼,但,我想看看是否有已建成的東西代碼首先進入實體框架。 – Samir

+0

'如果他們取消選擇車輛並重新選擇它,它將不再具有InventoryID'你的意思? –

回答

0

我認爲這是你需要什麼,試試這個:

第一次與用戶的PersonID檢查Inventory table身份登錄:

var Inventory = (from r in db.Inventory where r.PersonID== userID select r).ToList(); 

此列表中包含user沒有所有的車輛列表通過它與list with the correct field names循環並刪除哪些不在Inventory

考慮NewList具有正確字段名稱的列表,然後

foreach(var item1 in Inventory) 
{ 
    foreach(var item2 in NewList){ 
    { 
     if(item1.CarID == item2.CarID) // true only if old vehicle exist 
     { 
       // break from loop 
       break; 
     } 
     else{ 
       // remove item1 from Inventory 
       db.inventory.remove(item1); 
       db.SaveChanges(); 
     } 
    } 
} 

,你還需要一個新的車輛加入到數據庫

foreach(var item2 in NewList){ 
{ 
    foreach(var item1 in Inventory) 
    { 
     if(item1.CarID == item2.CarID) // true only if old vehicle exist 
     { 
       // break from loop 
       break; 
     } 
     else{ 
       //code add item2 to Inventory 
       db.inventory.add(item2); 
       db.SaveChanges(); 
     } 
    } 
} 
+0

是的,但這將有多個添加和刪除查詢,我希望有實體框架中的功能內置到儘量減少查詢但完成相同的任務。 – Samir

+0

您可以嘗試刪除其中包含'item1.CarID == item2.CarID'的所有數據,並添加具有正確字段名稱的列表 –