Я пытаюсь выбрать эквивалент
SELECT u.NodeId,
u.Name,
u.TierId,
u.OrgCode,
o.OrgName,
gtu.GroupId as ParentGroupId
FROM Unit u
LEFT JOIN GroupToUnit gtu ON u.NodeId = gtu.NodeId
JOIN Organisation o ON u.OrgCode = o.OrgCode
Мой эквивалент c # равен
IList<OrgChartNode> unitNodes = _db.Units
.Where(u => u.OrgCode.Equals(OrgCode))
.Select(u => new OrgChartNode
{
Id = u.NodeId,
Name = u.Name,
TierId = 0,
ParentGroupId = u.GroupLinks.First().GroupId,
OrgName = u.Organisation.Name,
OrgCode = u.OrgCode,
ContactName = null,
ContactEmail = null,
ContactPhone = null,
ContactId = null,
})
.OrderBy(u => u.Name)
.AsNoTracking()
.ToList();
Это переводится как начальный запрос для единиц ...
Microsoft.EntityFrameworkCore.Database.Command:Information: Executed DbCommand (5ms) [Parameters=[@__OrgCode_0='?' (Size = 5)], CommandType='Text', CommandTimeout='30']
SELECT [u].[NodeId] AS [Id0], [u].[ID] AS [Name0], [u.Organisation].[Name] AS [OrgName], [u].[OrgCode]
FROM [Report_Unit] AS [u]
INNER JOIN [Report_Organisation] AS [u.Organisation] ON [u].[OrgCode] = [u.Organisation].[OrgCode]
WHERE [u].[OrgCode] = @__OrgCode_0
ORDER BY [Name0]
, а затем подзапрос для каждого юнита, чтобы определить его идентификатор группы.(Повторите для каждой записи)
Microsoft.EntityFrameworkCore.Database.Command:Information: Executed DbCommand (1ms) [Parameters=[@_outer_NodeId='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [r1].[GroupId]
FROM [Report_Link_Group_to_Unit] AS [r1]
WHERE @_outer_NodeId = [r1].[NodeId]
Также происходит сбой, если модуль не связан.
Как мне изменить мой запрос для получения ожидаемых результатов?Я ожидаю, что все единицы, с нулем в ParentGroupId, если не ссылка.Кроме того, что такое хороший ресурс для изучения этого синтаксиса?Найти много примеров предыдущих версий, которые не совсем верны.