【发布时间】:2017-09-04 14:19:02
【问题描述】:
我有一张桌子EmployeDetails。我通过首先获取员工列表来从该表中删除行。使用 linq 的删除范围功能,但我在表中有 10000 条记录需要太多时间。
_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)));
};
【问题讨论】:
-
您可以尝试直接在上下文中执行 SQL Delete 命令。关注这个encodo.com/en/blogs.php?entry_id=%20311
-
用 SQL 而非 LINQ 编写或使用 SP。我知道不受欢迎,但有时这些旧方法仍然有效:)
-
需要多长时间?你要删除多少条记录?什么是表结构? (列+索引)?我猜你正在使用EF?以及什么 RDBMS?
-
也许使用分析器(如果是 mssql,则为 SQL Profiler)来检查为此查询生成的 sql,然后查看执行计划。这会让你知道瓶颈在哪里。