LINQ-SQL Обновление нескольких строк в одной транзакции - PullRequest
5 голосов
/ 02 июня 2010

Мне нужна помощь в переосмыслении этого устаревшего кода LINQ-SQL, который генерирует около 100 операторов обновления.

Я продолжу играть с лучшим решением, но буду признателен за некоторые идеи / прошлый опыт с этой проблемой.

Вот мой код:

List<Foo> foos;
int userId = 123;

using (DataClassesDataContext db = new FooDatabase())
{
     foos = (from f in db.FooBars
             where f.UserId = userId
             select f).ToList();

     foreach (FooBar fooBar in foos)
     {
         fooBar.IsFoo = false;
     }

     db.SubmitChanges()
}

По сути, я хочу обновить поле IsFoo на false для всех записей, имеющих конкретное значение UserId.

То, что происходит, .ToList() запускает запрос, чтобы получить все FooBars для конкретного пользователя, затем для каждого объекта Foo выполняет оператор UPDATE, обновляющий свойство IsFoo.

Может ли приведенный выше код быть повторно преобразован в один оператор UPDATE?

В идеале, единственный SQL, который я хочу запустить, это ниже:

UPDATE FooBars
SET    IsFoo = FALSE
WHERE  UserId = 123

EDIT

Хорошо, похоже, это невозможно сделать без использования db.ExecuteCommand.

Grr ...!

Вероятно, я в конечном итоге создам еще один метод расширения для пространства имен DLINQ. По-прежнему требуется некоторое жесткое кодирование (т.е. написание «WHERE» и «UPDATE»), но, по крайней мере, оно скрывает большинство деталей реализации от фактического синтаксиса запроса LINQ.

1 Ответ

2 голосов
/ 02 июня 2010

Проверка DataClassesDataContext.ExecuteCommand ...

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