当使用像下面这样的DeleteAllOnSubmit声明(我省略DataContext的,因为我使用LinqPad这里)如何解决的事实,LINQ到SQL是使用单独的SQL DELETE每个项目报表DeleteAllOnSubmit
var deleteUs = Foo.Take(9658);
Foo.DeleteAllOnSubmit(deleteUs);
SubmitChanges();
生成的SQL代码如下所示:
SELECT TOP (9658) [t0].[id] FROM [Foo] AS [t0]
GO
-- Region Parameters
DECLARE @p0 Int SET @p0 = 1
-- EndRegion
DELETE FROM [Foo] WHERE [id] = @p0
GO
-- Region Parameters
DECLARE @p0 Int SET @p0 = 2
-- EndRegion
DELETE FROM [Foo] WHERE [id] = @p0
GO
... and so on
2号线在C#代码不能知道,1号线转换为一个SELECT TOP语句,它会更快使用DELETE TOP声明。
问题:我如何解决这个问题而不诉诸于SQL?有没有办法让Linq语句翻译成DELETE TOP或类似的东西?
为什么你想在这里避免SQL?看起来像完美的解决方案。 –
非物质的,但你的第一行可能是简单的'Foo.Take(9658)' – Marc
@Andrew Barber:首先,这是一个风格问题,不要将SQL字符串混合到代码中,其次你必须使用第二个数据访问方法,第三,我真的很想知道这是否已经被微软团队所覆盖,因为他们声称框架产生了相当优化的SQL代码(我相信它通常是这样做的。) – Olaf