【问题标题】:How can I optimize this linq query?如何优化此 linq 查询?
【发布时间】: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,然后查看执行计划。这会让你知道瓶颈在哪里。

标签: c# linq


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多