代码之家  ›  专栏  ›  技术社区  ›  Scott Baker

筛选时Include()的顺序对性能有影响吗?

  •  1
  • Scott Baker  · 技术社区  · 7 年前

    这工作得很好,我假设它加载了所有实体和 Foo Bar 的值:

    var baz = "sillystring";
    context.Entities
           .Include(e => e.Foo)
           .Include(e => e.Bar)
           .Where(e.Foo == baz)
           .Select(e.Bar)
           .ToList();
    

    酒吧 子对象仅包含在实体的子集中?

    var baz = "sillystring";
    context.Entities
           .Include(e => e.Foo)
           .Where(e.Foo == baz)
           .Include(e => e.Bar) // moved to after the filter
           .Select(e.Bar)
           .ToList();
    

    .Select(e.Bar) 那个 酒吧

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ivan Stoev    7 年前

    事实是,在这种情况下这真的不重要,因为两者 Includes

    Include 仅当应用于查询结果根实体(如果有)时,s才有效。也就是说它们被忽略了( Select )对匿名/DTO/ViewModel等类型的查询。只考虑直接返回实体类型的查询,如前所述,如果 从实体类型开始。

    包括 s。使用导航属性进行过滤、排序、分组、选择等的查询的正确运行完全不需要它们 Load Related Entities

    在您的示例中,唯一有效的include是 Bar ,必须插入 Select(e => e.Bar) . 它们的顺序不重要,它们之间的LINQ运算符也不重要 选择 包括 只要他们不改变查询结果类型。