Мне нужна помощь в переосмыслении этого устаревшего кода 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.