【发布时间】:2013-07-24 01:19:06
【问题描述】:
我正在使用 Sql Server 2012 和 .NET 4
我想转换为 C# 的 Sql 如下所示:
SELECT rd.Name, rd.Description, prdv.Value
FROM RoleDetail rd
JOIN Role r ON r.RoleID = rd.RoleID
JOIN PersonRole pr ON pr.RoleID = r.RoleID
LEFT OUTER JOIN PersonRoleDetailValue prdv ON prdv.RoleDetailID = rd.RoleDetailID
WHERE pr.PersonID = 42
经过几次尝试并浪费了很多时间,我似乎并没有比刚开始时更好。任何帮助表示赞赏。
我更喜欢方法语法,但也非常欢迎查询语法解决方案。
解决方案(感谢 David B 下面的回答)
以下都是可行的解决方案。我希望其他人可以受益...
方法语法:
var methodSyntax = db.PersonRoles
.Where(pr => pr.PersonID == 42)
.SelectMany(pr => pr.Role.RoleDetails)
.SelectMany(rd => rd.PersonRoleDetailValues.DefaultIfEmpty(), (rd, prdv) => new
{
Name = rd.Name,
Description = rd.Description,
Value = prdv.Value
});
查询语法:
var querySyntax = from pr in db.PersonRoles
where pr.PersonID == 42
let r = pr.Role
from rd in r.RoleDetails
from prdv in rd.PersonRoleDetailValues.DefaultIfEmpty()
select new
{
Name = rd.Name,
Description = rd.Description,
Value = prdv.Value
};
谢谢
【问题讨论】:
-
你有没有想过下载 Linqer 或 LinqPad??
-
@DJKRAZE,不,我没有,谢谢。 Linqer 成本,但我会试试 LinqPad。
-
为什么这个问题被否决了?很高兴听到有理由的评论,这样我就可以改进。
-
这是一个很好的问题,我给了你一个 UpVote
标签: c# .net sql linq linq-to-sql