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

时间:2009-03-20 21:14:15

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

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

UPDATE [TB_EXAMPLE] SET [COLUMN1] = 1

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

6 个答案:

答案 0 :(得分:8)

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

ExecuteQuery方法返回LINQ to SQL Entities,因此您需要将类型传递给它:

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

[C#]
MyDataContext.ExecuteQuery<Product>("SELECT * FROM PRODUCTS");

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

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

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

答案 1 :(得分:2)

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

引用上面DataContext链接的评论:

  

此方法是传递方式   LINQ to SQL的情况机制   没有足够的规定   特殊情况。

     

命令的语法差不多   与用于创建的语法相同   一个ADO.NET DataCommand。唯一的   不同之处在于如何参数   是指定的。具体来说,你   通过将它们括起来指定参数   在大括号({...})中并枚举它们   从0开始。参数是   与同等编号相关联   参数数组中的对象。

答案 2 :(得分:1)

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

dbDataContext.SubmitChanges();

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

edt,oops to slow;)

答案 5 :(得分:0)

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

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-to-sql-part-8-executing-custom-sql-expressions.aspx使用ExecuteQuery和ExecuteCommand方法