Мне нужно обновить строку аварий с помощью Linq для 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 раз, что действительно медленно, неэффективно и неоптимизировано.Реальный запрос более сложный и обновляет больше данных, использует .Where (a => a.Time! = Null) и другие вещи.
Но только для улучшения запроса выше, который можно заменить наочень эффективный SQL-запрос:
UPDATE [Alarms]
SET Alarm_Ack_UTC = GETUTCDATE()
GO
Как этого добиться с помощью Linq to SQL?Или это невозможно?