C# 将SQL查询转换为lambda表达式
SQL查询:C# 将SQL查询转换为lambda表达式,c#,sql-server,linq,lambda,entity-framework-core,C#,Sql Server,Linq,Lambda,Entity Framework Core,SQL查询: SELECT M.MailItemId, m.Subject, ISNULL(m.SendCC, ''), ISNULL(attachments.counter, 0) Counters, M.CreationDate FROM MailItem AS M LEFT OUTER JOIN (SELECT MailItemId, COUNT(MailItemId) counter FROM Attac
SELECT
M.MailItemId, m.Subject,
ISNULL(m.SendCC, ''),
ISNULL(attachments.counter, 0) Counters,
M.CreationDate
FROM
MailItem AS M
LEFT OUTER JOIN
(SELECT
MailItemId, COUNT(MailItemId) counter
FROM Attachment Group By MailItemId) AS attachments ON M.MailItemId = attachments.MailItemId
有两种型号MailItem
和Attachment
。希望根据上述条件获取数据
我想将上面的查询转换为lambda表达式。在不知道实体模型是什么样子的情况下,这需要很多假设,主要是存在一个导航属性
Attachments
,该属性定义MailItem
和Attachment
之间的一对多关系。但假设它确实存在,您应该能够做一些简单的事情,如:
_context.MailItems.Select(mi => new {
MailItemId = mi.MailItemId,
Subject = mi.Subject,
Subject = mi.SendCC,
Counters = mi.Attachments.Count,
CreationDate = mi.CreationDate
});
Lambda-不是“Lambda”…请添加您的实体,您尝试过的代码以及不适用于您的代码。@stickt01 MailItemId是MailItem表中的主键,也是附件表中的外键。当然@Kida-因此通常您的
MaiItem
模型将具有类似公共虚拟IEnumerable Attachments
的属性,而Attachment
将具有公共虚拟邮件项目MailItem
。然后,通常会在映射文件中使用这些导航属性来定义外键关系。虽然这是假设先编写代码,但由于大部分内容都没有看到您的模型,因此几乎不可能构造表达式。@stickt01-否。MailItem和Attachment是两个不同的模型。它们都具有MailItemId属性。是的,我知道@Kida但是导航属性可以使生成的查询与您非常想要的查询类似更容易的。看见