【发布时间】:2018-06-01 00:37:01
【问题描述】:
我正在尝试选择相当于
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]
然后是每个 Unit 的子查询以确定其 GroupId。 (每条记录重复)
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 中的值为 null。此外,学习这种语法的好资源是什么?发现很多以前版本的例子都不太有效。
【问题讨论】:
-
@mjwills 谢谢,
.Select(d => d.GroupId).SingleOrDefault()表示它没有抛出错误,但仍然无法正常工作。需要进一步调查。稍微不同的语法让我失望。
标签: c# entity-framework-core ef-core-2.0