使用LINQ to SQL执行更新/设置

时间:2010-12-02 19:38:17

标签: c# sql linq linq-to-sql

因此,如果我直接使用此查询或使用db.ExecuteCommand(),一切都会正常工作;

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

但是,我似乎无法在LINQ to SQL中执行此操作,我尝试了一些看起来应该工作的方法,这里有一个示例:

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

我不知道还有什么可以让它发挥作用。

修改

我只想编辑一个项目

4 个答案:

答案 0 :(得分:1)

Area表上是否定义了主键? 如果没有定义主键,Linq 2 SQL将不会更新表。 (而且,据我所知,它将无声地失败)。

答案 1 :(得分: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();

答案 2 :(得分:0)

没有用于进行批量更新的内置方法。但您可以从this blog中选择一些批量扩展程序。

答案 3 :(得分: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();
}