代码之家  ›  专栏  ›  技术社区  ›  koryakinp

Where子句和Join的LINQ顺序

  •  1
  • koryakinp  · 技术社区  · 6 年前

    以下各项之间是否存在性能差异:

    ctx
       .Students
       .Join(
          ctx.Countries, 
          q => q.CountryId, 
          q => q.CountryId, 
          (c,s) => new { c,s })
       .Where(q => q.c.CountryName= "USA")
       .Select(q => q.s.StudentName)
       .ToList();
    

    以及:

    ctx
       .Students
       .Join(
          ctx.Countries.Where(q => q.CountryName == "USA"), 
          q => q.CountryId, 
          q => q.CountryId, 
          (c,s) => s)
       .Select(q => q.StudentName)
       .ToList();
    

    如果是,哪种查询更可取?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Keith    6 年前

    一般规则是先过滤,也就是说先过滤。不过,对于像C这样的编译语言,您真的应该对其进行测试。抛出一些时间戳,看看执行大型查询需要多长时间。

    原因是编译器经常会为您优化代码。实际运行的代码不是您编写的代码,因此请编写可读性代码,让编译器进行优化,然后测试性能。如果绩效不佳或需要改进,则进行调整。