将带有连接的 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 查询(语句中没有内连接)