2012-02-16 90 views
-2

當我使用 var select = from st in context.student where st.college ==「ABC」 select st;'刪除操作使用linq

context.student.DeleteAllonSubmit(select); context.student.SubmitChanges();

如果有10條包含大學名稱的記錄作爲「ABC」,則會啓動10條刪除查詢。

+1

可能的重複http://stackoverflow.com/questions/445033/use-linq-to-generate-direct-update-without-select – 2012-02-16 11:59:16

+0

但是,選擇查詢觸發的確切原因仍未清除。我們如何避免使用Linq更新和刪除查詢中的select語句 – Piyush 2012-02-16 12:06:12

+0

我認爲,因爲答案是這樣的 - LINQ或LINQ to SQL都具有基於集合的更新功能。第二個「答案」提供了一個解決方法。但看看是否有其他人有任何補充。我很有興趣 – 2012-02-16 12:08:56

回答

1

那麼我唯一的解釋是,Linq首先必須選擇你想要更新/刪除的行。知道哪些行受到更新/刪除的影響後,Linq會創建最充分的查詢來更新/刪除所需的行並執行它。

如果我錯了,請糾正我,這是我認爲正在發生的事情,我不知道它是肯定的。

+0

那麼實際發生的是以下幾點。當你創建一個對象時,實體框架使用你的edmx文件(或者處理從數據庫到對象的轉換的另一個文件)從數據庫中創建對象。這些對象與您的數據庫不同步。所以,當你從對象上下文中刪除/更新對象,並且你說要保存對象上下文時,實體框架會將你的對象與數據庫中的對象(也使用edmx(或其他))進行比較。然後,實體框架根據您的更改更新數據庫(使用最佳查詢)。 – 2012-02-16 12:26:02

+0

很高興幫助(不要忘記投票:))。我建議打開你的對象上下文做一個Linq查詢,刪除你想要刪除的所有行。然後保存更改並關閉對象上下文(您應該使用using語句,但這是另一回事)。 Linq應該很聰明,它可以在單個查詢中檢測到它是可能的。你做到了,Linq可以做到幾乎一樣。然後,你所要做的就是信任Linq icm實體框架執行正確的查詢。你也可以在SQL Server 2008中監視發送查詢。 – 2012-02-16 12:44:49

+0

你可以發佈你正在做的Linq查詢嗎?也許弄清楚這10個查詢究竟是什麼?表掃描表尋求ect – 2012-02-17 08:28:32