是否可以使用Linq to SQL运行任意查询? (C#)

如何使用Linq to SQL编写以下查询?

UPDATE [TB_EXAMPLE] SET [COLUMN1] = 1 

(我的实际目标比这更复杂)

DataContext类有两个查询方法,ExecuteCommand和ExecuteQuery。

ExecuteQuery方法返回LINQ to SQL Entities,因此您需要向其传递一个类型:

 [VB.Net] MyDataContext.ExecuteQuery(Of Product)("SELECT * FROM PRODUCTS") [C#] MyDataContext.ExecuteQuery("SELECT * FROM PRODUCTS"); 

但是,ExecuteCommand不需要类型,您将此方法用于UPDATE查询因为您只需要一个String来编写查询,您可以使用reflection为DAL创建一个非常通用的UPDATE方法。

 MyDataContext.ExecuteCommand("UPDATE Products WHERE ProductID = {0}",1) 

要么

 MyDataContext.ExecuteCommand("UPDATE Products WHERE ProductID = 1") 

是。 DataContext有一个ExecuteCommand方法,允许您执行任意(希望是参数化的)SQL。

引用上面DataContext链接的注释:

对于LINQ to SQL无法充分提供特定方案的情况,此方法是一种传递机制。

该命令的语法与用于创建ADO.NET DataCommand的语法几乎相同。 唯一的区别在于如何指定参数。 具体来说,您可以通过将参数括在大括号({…})中来指定参数,并从0开始枚举它们。该参数与参数数组中编号相同的对象相关联。

 foreach(var TB_EXAMPLE ex dbDataContext.TB_EXAMPLES) { ex.COLUMN1 = 1; } dbDataContext.SubmitChanges(); 

假设有一个DataContext连接,您可以使用DataContext对象的ExecuteCommand方法来执行不返回对象的SQL命令。

http://msdn.microsoft.com/en-us/library/bb386906.aspx

 var row = (from t in dataContext.table where t.id==1 select t).Single(); row.columnName = 1; dataContext.SubmitChanges(); 

edt,oops减速;)

您可以直接更新对象,然后调用保存更改。

 using (var ctx = new MyDataContext()) { var customer = ctx.Customers.First(); customer.Name = "New Name"; ctx.SaveChanges(); } 

如果您正在寻找这样的实际SQL命令,那么Scott Guthrie有一篇很好的文章,演示了如何在http://weblogs.asp.net/scottgu/archive/2007/08/27/linq上使用ExecuteQuery和ExecuteCommand方法-to-SQL部分-8-执行定制-SQL expressions.aspx