2009-12-27 62 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