var query = from organization in _context.Organizations
join location in
(
from location in _context.Locations
orderby location.Name
select new
{
location.Id,
location.Name,
location.OrganizationId,
}
) on organization.Id equals location.OrganizationId into
locations
orderby organization.Name
select new
{
organization.Id,
organization.Name,
locations
};
我正在使用Entity Framework Core 1.1。我在这里加入组织与组织LINQ中的位置表。但是当我运行上面的LINQ查询时,我在SQL事件探查器中得到了两个单独的select语句,
我明白了:
SELECT [organization].[Id], [organization].[Name]
FROM [Organization] AS [organization]
ORDER BY [organization].[Name]
SELECT [location].[Id], [location].[Name]
FROM [Location] AS [location]
ORDER BY [location].[LoName]
我的期望是在SQL事件探查器中连接两个表的单个查询。但是我缺少的是所以这在SQL中作为单个连接查询运行?
答案 0 :(得分:0)
EF Core 1.x无法将复杂的LINQ查询转换为优化的TSQL查询,如EF 6.在这种情况下,EF Core仅生成用于从数据库获取数据的查询,其余操作(如group by或complex where子句)将在内存中发生。在你的情况下生成的tsql查询用于获取数据和连接,order by和projection将在内存中发生,所以如果你在那些表中有大数据或者写原始sql查询而不是linq查询时要小心。