我想将这个t-sql转换为linq到sql。
UPDATE Table1
SET CustomerName = 'john Doe'
FROM Table1
JOIN Table2
ON Table1.TableID = Table2.TableID
WHERE CustomerID = 4
答案 0 :(得分:2)
使用LINQ-to-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();
如果您确定结果集对我来说很小但是它在大型结果集上表现糟糕,那么这种方法很好。有batch updates使用LINQ-to-SQL的方法,或者你只能使用DataContext.ExecuteCommand
。
答案 1 :(得分:1)
ExecuteCommand适用于少数(希望)LINQ to SQL不够强大的场合。
答案 2 :(得分:0)
不幸的是,Linq to SQL没有“更新”语句。扩展方法,IQueryable
,表达式树和DbCommand
可能(但有点复杂)。一种方法是here - 最后可以下载一些源代码。
请记住,对于更复杂的查询,这可能是错误的。当我使用Linq to SQL时,我通常会通过存储过程完成所有批量更新/删除。
或者,如果您只是想让更新代码更容易编写而不关心性能(即因为您知道要更新的行数非常少),就会实现{{你可以使用的3}}(扩展方法)。
答案 3 :(得分:0)
如果我正确理解您的SQL查询,您希望使用CustomerId = 4
更新客户的名称。
由于您无法直接发出此SQL(正如其他人已经指出的那样),您需要从db(使用DataContext
)获取id为4的客户,更改其名称并提交更改使用DataContext.SubmitChanges().