2010-12-02 53 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(); 
}