2017-09-04 98 views
1

我有一個表EmployeDetails。我通過首先獲取員工列表來刪除此表中的行。使用linq的刪除範圍函數,但它佔用了太多時間,我在表中有10000條記錄。如何優化此linq查詢?

_dbRepository.Write(ctx => ctx.EmployeDetails.RemoveRange(
     ctx.EmployeDetails.Where(
      v => !v.LastLogin.HasValue || DbFunctions.DiffDays(DbFunctions.CreateDateTime(v.LastUpdate.Value.Year, v.LastUpdate.Value.Month, v.LastUpdate.Value.Day, 0, 0, 0), today) > 0))); 
}; 
+1

您可以嘗試執行SQL直接刪除命令上下文。按照這個http://encodo.com/en/blogs.php?entry_id=%20311 –

+2

寫在SQL不LINQ或使用SP。我不知道,但有時這些老方法仍然有效:) – LoztInSpace

+1

需要多長時間?您要刪除多少條記錄?什麼是表結構? (列+索引)?我猜你正在使用EF?和什麼RDBMS? –

回答

0

試試這個:

_dbRepository.Write(ctx =>  ctx.Database.ExecuteSqlCommand(@" 
delete from EmployeDetails 
where LastLogin is null 
or CONVERT(date, LastUpdate) > {0}", today));