2010-12-02 54 views
1

因此,如果我直接使用此查詢或使用db.ExecuteCommand(),一切都會正常工作;使用LINQ to SQL來執行更新/設置

update Market..Area set EndDate = NULL where ID = 666 and NID =1 and Code = 36003 

但是,我似乎在LINQ這樣做是爲了SQL,我已經嘗試了幾種不同的方法,所有看起來像他們應該工作,這裏是一個示例:

var s= db.Area.Single(s => s.ID == 666 && s.Code == 36003 && s.NID == 1); 
s.EndDate = null; 
db.SubmitChanges(); 

我不知道還有什麼可以嘗試使這個工作。

編輯

我只是試圖編輯一個項目

回答

1

在Area表上定義了主鍵嗎? Linq 2 SQL不會對沒有定義主鍵的表進行更新。 (而且,據我記憶,它將無聲無息地失敗)。

+0

啊,我想我的問題。沒有主鍵。那意味着根本沒有辦法做到這一點? – James 2010-12-02 20:22:13

0

你想更新多個項目?即使不是你可以寫這樣的:

IQueryable<Area> iArea = 
    from s in db.Area 
    where s.ID == 666 && s.Code == 36003 && s.NID == 1 
    select s; 

iArea.ToList().ForEach(item => { item.EndDate = null; }); 

db.SubmitChanges(); 
+0

是的,我會一次更新一個項目。由於某些原因,代碼仍然無法正常工作。它編譯並運行良好,但將EndDate更改爲null的操作不會發生。 – James 2010-12-02 20:08:23

0

沒有內置的方法做批量更新。但是你可以從this blog中選擇一些批量擴展。

0

您的語法看起來是正確的。我能想到的唯一一件會導致失敗的事情是,如果您嘗試在同一數據上下文中進行多個更新。試試這個:

using (DataContext db = new DataContext()) 
{ 
    var s = db.Area.Single(s => s.ID == 666 && s.Code == 36003 && s.NID == 1); 

    s.EndDate = null; 
    db.SubmitChanges(); 
}