2009-12-27 73 views

回答

0

不幸的是,Linq to SQL沒有「update」語句。使用擴展方法IQueryable,表達式樹和DbCommand s可能(但有點複雜)。一種方法是here - 您可以在最後下載一些源代碼。

請記住,這可能是更復雜的查詢錯誤。當我使用Linq到SQL時,我通常會通過存儲過程執行所有批量更新/刪除操作。

或者,如果您只是希望使更新代碼更易於編寫而不關心性能(即因爲您知道將有非常少量的行進行更新),所以實現了一個Update Operator (擴展方法),您可能可以使用。

+0

@Aaron:我認爲需要注意的是你指出的'Update'擴展方法是一個LINQ-to-Objects擴展方法;也就是說,它會在內存中執行更新,並且仍然需要調用「DataContext.SubmitChanges」。 – jason 2009-12-27 19:03:47

+0

@Jason:是的,它只是取代了'foreach'循環。附:感謝您重新發布我的批量更新鏈接。 ;-) – Aaronaught 2009-12-27 19:31:02

1

ExecuteCommand適用於LINQ to SQL功能不夠強大的少數(希望)場合。

0

如果我正確理解你的SQL查詢,你想用CustomerId = 4更新客戶的名字。

由於您不能直接發佈此SQL(如其他人已經指出的那樣),您需要從db中使用id 4獲取客戶(使用DataContext),更改他的名稱並將更改提交到數據庫使用DataContext.SubmitChanges().

2

這是一個簡單的方法來做到這一點使用LINQ到SQL:

var query = from x in db.Table1 
      join y in db.Table2 on x.TableID equals y.TableID 
      where x.CustomerID == 4 
      select x; 

foreach(var result in query) { 
    result.CustomerName = "John Doe"; 
} 

db.SubmitChanges(); 

這個方法是好的,如果你確定了結果集將我小,但它的大慘敗執行結果集。有使用LINQ到SQL的batch updates的方法,或者您可以使用DataContext.ExecuteCommand