2012-06-29 51 views
1

目前,我正在編寫一個MiddleWare應用程序,用於同步應用程序(如Quickbooks)和SQL數據庫之間的信息。我對Linq-To-SQL相當陌生,目前正在努力解決最初看起來很簡單的問題。刪除不在子句中 - Linq-To-SQL

總之,我有邏輯從會計應用程序查詢會計科目表(即AR,收入,費用,責任等等)。然後,我的中間件必須確定是否需要在每個記錄的SQL數據庫的Accounts表中插入,更新或刪除一個帳戶。搞清楚操作是插入還是刪除很容易弄清楚,但是,我正在努力處理從Quickbooks中刪除帳戶並需要從我的SQL數據庫中刪除帳戶的情況。我想運行一個Linq-To-Sql查詢,該查詢基本上從Account表中刪除所有記錄,其中ListID不在從查詢中檢索到的ListID列表中。有沒有一些簡單的方法在Linq-To-Sql中執行此操作?

回答

3
db.accounts.Where(x => !ListIDs.Contains(x.ID)) 
3

假設您已經填充在一個單獨的查詢ListIDs(listOfIDs)的列表:

var accounts = from a in db.Accounts 
       where !listOfIDs.Contains(a.ListID) 
       select a; 
db.Accounts.RemoveAll(accounts); 
db.SubmitChanges(); 
1

與拉姆達或簡單的LINQ像以前所說的請求吧。然後

db.accounts.Attach(yourObject); 
db.accounts.DeleteOnSubmit(yourObject); 
db.SubmitChanges(); 

當然..保護它與try/catch並歡迎Linq!

0

你沒有說你正在使用哪個SQL驅動程序,但無論它是哪個(很短的列表),肯定是驅動程序使用QuickBooks SDK來訪問帳戶圖表。爲了查找名爲ListDeletedQuery的已刪除實體(如帳戶),SDK有一個特殊查詢。作爲一般規則,如果要查找已刪除的內容,使用ListDeletedQuery會更有效。但是,由於會計科目表通常很小,因此可能會接受掃描整個清單,以便查找缺失的元素。另外,ListDeletedQuery可能不會被您正在使用的SQL驅動程序公開。