【发布时间】:2012-03-16 19:27:35
【问题描述】:
我需要使用 Linq to SQL 更新一行警报,其中可以包含超过 100000 行。
这意味着一个简单的更新,例如:
foreach (var alarm in Alarms)
{
alarm.Alarm_Ack_UTC = DateTime.UtcNow;
}
SubmitChanges();
给我一个
的 SQL 查询SELECT [t0].[Alarm_ID], [t0].[Alarm_Application_Number], [t0].[Alarm_Ack_UTC], [t0].[Alarm_DateTime_UTC], [t0].[Alarm_Message_Number], [t0].[Username], [t0].[Runtime_Message], [t0].[Alarm_Application_Name], [t0].[Alarm_Application_Computer], [t0].[Alarm_GUID], [t0].[Alarm_Comments]
FROM [Alarms] AS [t0]
GO
-- Region Parameters
DECLARE @p0 Int = 1
DECLARE @p1 DateTime = '2012-03-16 11:56:25.850'
-- EndRegion
UPDATE [Alarms]
SET [Alarm_Ack_UTC] = @p1
WHERE [Alarm_ID] = @p0
GO
-- Region Parameters
DECLARE @p0 Int = 2
DECLARE @p1 DateTime = '2012-03-16 11:56:25.851'
-- EndRegion
UPDATE [Alarms]
SET [Alarm_Ack_UTC] = @p1
WHERE [Alarm_ID] = @p0
GO
-- Region Parameters
DECLARE @p0 Int = 3
DECLARE @p1 DateTime = '2012-03-16 11:56:25.851'
-- EndRegion
UPDATE [Alarms]
SET [Alarm_Ack_UTC] = @p1
WHERE [Alarm_ID] = @p0
GO
重复了 100000 次,真的很慢,效率低,没有优化。 真正的查询更高级,更新更多数据,使用a .Where(a => a.Time != null) 等。
但只是为了改进上面的查询,可以用非常高效的 SQL 查询代替:
UPDATE [Alarms]
SET Alarm_Ack_UTC = GETUTCDATE()
GO
如何使用 Linq to SQL 实现这一目标?还是不可能?
【问题讨论】:
标签: c# linq linq-to-sql