将带有连接的 SQL 查询转换为 lambda 表达式

Posted

技术标签:

【中文标题】将带有连接的 SQL 查询转换为 lambda 表达式【英文标题】:Convert SQL query with join to lambda expression 【发布时间】:2014-04-09 02:21:23 【问题描述】:

不确定如何将以下 sql 转换为 lambda 表达式。我的数据库以一对多的关系使用与表 Content_Training 相关的参照完整性和表 Content(1 个内容可以有多个 content_training)

select c.ContentId, c.Name, ct.TrainingTypeId 
from dbo.Content c left join dbo.Content_Training ct on c.ContentId = ct.ContentId
where c.PublishDate is not null
order by ct.TrainingTypeId, c.Name

【问题讨论】:

【参考方案1】:

试试这个查询:

var results = (from c in dbcontext.Contents
               join ct in dbcontext.Content_Trainings on c.ContentId equals ct.ContentId into t
               from rt in t.DefaultIfEmpty()
               select new
               
                   c.ContentId,
                   c.Name,
                   TrainingTypeId = (int?)rt.TrainingTypeId
               ).OrderBy(r => r.TrainingTypeId)
                 .ThenBy(r => r.Name);

【讨论】:

我会不断使用查询语法,不使用 lambda,即orderby x,y。它会更具可读性。 感谢 Abatishchev。在过去,我使用了“let”关键字,而不是您使用的“into t ... t.DefaultIfEmpty()”。有什么区别?

以上是关于将带有连接的 SQL 查询转换为 lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有内连接语句的 Sql 查询转换为带有 Where 语句的 sql 查询(语句中没有内连接)

带有语句体的 lambda 表达式无法转换为 nopCommerce 中的表达式树 [重复]

如何即时将 lambda 表达式转换为 Sql 查询?

linq/lambda 查询中的双内连接?

如何将带有子选择的 SQL 查询转换为 MDX 查询?

C# 将带有 Case 语句的 SQL 查询转换为 LINQ