Sha*_*ica 8 .net c# linq linq-to-sql
我有2个Linq2Sql类:Parent
和Child
.我想做一些事情,比如删除父母的所有孩子,或更新所有子记录.在SQL中我会写:
delete Child where ParentID = @p
Run Code Online (Sandbox Code Playgroud)
要么
update Child set Val = Val+1 where ParentID = @p
Run Code Online (Sandbox Code Playgroud)
我可以在Linq中以蛮力的方式在Parent
课堂内这样做:
Children.ToList().ForEach(c => c.DeleteOnSubmit()); // DeleteOnSubmit is my own method
Run Code Online (Sandbox Code Playgroud)
和
Children.ToList().ForEach(c => c.Val++);
Run Code Online (Sandbox Code Playgroud)
但鉴于Linq对ForEach循环的固有性能损失,这似乎是一种非常低效的方法.是否有某种方法可以实现所需的结束,只会触发一个查询?
Kon*_*man 14
对于这些情况,您可以使用DataContext.ExecuteCommand方法直接在数据库上执行SQL.例如:
dataContext.ExecuteCommand("delete Child where ParentID = {0}", parentId);
Run Code Online (Sandbox Code Playgroud)
看看这个链接:它正在使用ExpressionTree:http : //www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx [Broken Link]
http://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/ [可能是正确的]