【发布时间】:2021-12-17 23:13:01
【问题描述】:
我的问题是使用另外 4 个不同的列类型来提取不同的 PartId,就像 SQL 查询一样。图 1 显示了我想要的输出。问题是,如果我们假设我们默认使用 dBcontext,我如何使用 LINQ 和 EF Core 解决同样的问题。更重要的是假设对象 ApprovalNumberRecord 是 DbSet 并且可以导航到 Part 和 Approval 对象。
SELECT
B.PartId
,Sum(Case when B.ApprovalName = 'R-67' then 1 Else 0 End) as [R-67]
,Sum(Case when B.ApprovalName = 'R115' then 1 Else 0 End) as [R115]
,Sum(Case when B.ApprovalName = 'LPG-D' then 1 Else 0 End) as [LPG-D]
,Sum(Case when B.ApprovalName = 'CNG-D' then 1 Else 0 End) as [CNG-D]
FROM
(SELECT
anr.PartId
,a.ApprovalName
,anr.IsVisible
,p.[Description]
FROM
ApprovalNumberRecord AS anr
LEFT JOIN
Parts AS p ON anr.PartId = p.Id
LEFT JOIN
Approvals AS a ON anr.ApprovalId = a.Id) AS B
GROUP BY
B.PartId
这是内部的 SELECT 输出:
在数据库模型之下:
ApprovalNumberRecord 类:
... //other fields and properties
public Part Part { get; set; }
public Approval Approval { get; set; }
零件类:
public Producer Producer{ get; set; }
public Category Category { get; set; }
public ICollection<ApprovalNumberRecord> ApprovalNumberRecords { get; set; }
审批等级:
none navigation objects inside
【问题讨论】:
-
请展示您如何将数据库模型映射到 EF 类。我们需要查看导航属性。另外,Please don't post code, exceptions, or results as images。它们不能被复制(部分)用于回答,它们的“文本”不会出现在搜索引擎中。
-
嗨@GertArnold 我认为它足够清晰透明,可以正确提问。感谢您的意见。
标签: sql entity-framework linq case distinct