Можно ли запускать произвольные запросы с Linq to SQL? (С #) - PullRequest
2 голосов
/ 21 марта 2009

Как написать следующий запрос, используя Linq to SQL?

UPDATE [TB_EXAMPLE] SET [COLUMN1] = 1

(Моя настоящая цель более сложна, чем эта)

Ответы [ 6 ]

8 голосов
/ 21 марта 2009

Класс 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. Поскольку для написания запроса вам нужна только строка, вы можете использовать отражение, чтобы создать действительно общий метод UPDATE для вашего DAL.

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

или

MyDataContext.ExecuteCommand("UPDATE Products WHERE ProductID = 1") 
2 голосов
/ 21 марта 2009

Да. У DataContext есть метод ExecuteCommand , который позволит вам выполнить произвольный (надеюсь, параметризованный) SQL.

Цитирование из замечаний по ссылке DataContext выше:

Этот метод является сквозным механизм для случаев, когда LINQ to SQL не обеспечивает адекватно конкретный сценарий.

Синтаксис команды почти такой же, как синтаксис, используемый для создания ADO.NET DataCommand. Единственный Разница в том, как параметры указаны. В частности, вы указать параметры, заключив их в фигурные скобки ({…}) и перечислить их начиная с 0. Параметр ассоциируется с одинаково пронумерованными объект в массиве параметров.

1 голос
/ 21 марта 2009
var row = (from t in dataContext.table
            where t.id==1
            select t).Single();
row.columnName = 1;
dataContext.SubmitChanges();

edt, ой, чтобы замедлить;)

1 голос
/ 21 марта 2009

Предполагая соединение DataContext, вы можете использовать метод ExecuteCommand объекта DataContext для выполнения команд SQL, которые не возвращают объекты.

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

1 голос
/ 21 марта 2009
foreach(var TB_EXAMPLE ex dbDataContext.TB_EXAMPLES)
{
   ex.COLUMN1 = 1;
}

dbDataContext.SubmitChanges();
0 голосов
/ 21 марта 2009

Вы можете обновить объект напрямую, затем вызвать изменения сохранения.

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

Если вы хотите сделать именно эту и настоящую команду SQL, то Скотт Гатри (Great Scott Guthrie) написал отличную статью, в которой демонстрируется использование методов ExecuteQuery и ExecuteCommand на http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...