У меня есть 2 класса Linq2Sql: Parent
и Child
. Я хочу сделать вещи как удаление всех детей для родителя или обновления всех дочерних записей. В SQL я записал бы:
delete Child where ParentID = @p
или
update Child set Val = Val+1 where ParentID = @p
Я могу сделать это в Linq грубая сила путь в Parent
класс:
Children.ToList().ForEach(c => c.DeleteOnSubmit()); // DeleteOnSubmit is my own method
и
Children.ToList().ForEach(c => c.Val++);
Но, учитывая свойственную потерю производительности Linq на Циклах foreach, это походит на очень неэффективный способ сделать вещи. Есть ли некоторый способ достичь желаемой цели, которая исчерпает точно один запрос?
Посмотрите на эту ссылку: Используется ExpressionTree: http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx [Неработающая ссылка]
http://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/ [Вероятно, правильный]
Для этих случаев вы можете использовать метод DataContext.ExecuteCommand для непосредственного выполнения SQL в вашей базе данных. Например:
dataContext.ExecuteCommand("delete Child where ParentID = {0}", parentId);
] Посмотрите на [] http://magiq.codeplex.com[] mass operation with linq. [
]