是否可以为具有1对M子项的实体进行投影,从而产生单个SQL查询?

时间:2018-03-09 12:38:57

标签: .net linq linq-to-sql linq-to-entities

我知道通过在LINQ-to-SQL或LINQ-to-Entities查询中投射(或"整形")结果,可以将生成的SQL查询推送到比没有更高性能的情况下

这里有两篇优秀的文章by Eugene Prystupaby Rick Strahl

请注意,在这些文章中给出的示例中,投影仅包括与起点具有1对1关系的子项。例如,Order.CustomerOrder.Date等。当我包含具有1对M关系的实体时,例如Order.OrderItems,我最终生成了多个SQL查询:一个在表Order上,一个n个查询在表OrderItem上,其中n是数字从第一个查询返回的Orders。 (我说"至少",因为如果OrderItem也有子实体,这些将获得他们自己的SQL选择查询。)

导致单个SQL查询的示例代码:

Orders.Select(o => new {
    o.Id,
    o.Customer.FirstName,
    o.EmployeeName
}).Take(3)

导致(至少)n SQL查询的示例代码:

Orders.Select(o => new {
    o.Id,
    o.Customer.FirstName,
    o.EmployeeName,
    o.OrderItems
}).Take(3)

是否总是在使用1对M关系的子项形成数据时始终生成多个SQL查询?或者可以重写LINQ查询,以便结果是单个(更高性能)SQL查询?

(请注意,我目前正在使用LINQ-to-SQL,但我也想知道LINQ-to-Entities。)

0 个答案:

没有答案