如何使用Linq to SQL编写以下查询?
UPDATE [TB_EXAMPLE] SET [COLUMN1] = 1
(我的实际目标比这更复杂)
答案 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命令。
答案 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方法