C# 如何在Linq(C MVC)中用case编写左连接
如何在Linq中编写以下查询:C# 如何在Linq(C MVC)中用case编写左连接,c#,sql,entity-framework,left-join,C#,Sql,Entity Framework,Left Join,如何在Linq中编写以下查询: SELECT s.displayname AS Skill, CASE WHEN us.skillid IS NULL THEN '0' ELSE '1' END AS HasSkill FROM skills s LEFT JOIN userskills us ON s.id = us.skillid 我已经做了几个
SELECT s.displayname AS Skill,
CASE
WHEN us.skillid IS NULL THEN '0'
ELSE '1'
END AS HasSkill
FROM skills s
LEFT JOIN userskills us
ON s.id = us.skillid
我已经做了几个小时了,我真的无法理解这些查询的结构。对于普通SQL查询在其他方面对我所做的事情来说,它们似乎是压倒性的,太复杂了
var skills = _context.Skills.ToList();
var userSkills = _context.UserSkills.ToList();
var result = skills.GroupJoin(userSkill, skill => skill.ID, skill => userSkill , (userSkill, skill) => new {
Key = userSkill,
Skills = skill
});
您可以尝试将linq与DefaultIfEmpty一起使用,使其成为左连接
然后使用select和三元运算符在
对于左联接,您需要在结果中的r的条目中使用DefaultIfEmpty d var result=from e。其中x=>x.PropertyId==e.PropertyId。其中x=>e.ValueAsString.Equalsx.Value,StringComparison.InvariantCultureIgnoreCase.DefaultIfEmpty选择新建{Result=r,Entry=e}.ToList@罗伯塔维我已经看到了这些问题。谢谢你的帮助。是DefaultIfEmpty把它变成了一个左连接而不是一个内部连接吗?等等,我们是什么?是第2行的吗?我猜应该是加入我们吧。
from s in skills
join u in userSkills
on new s.id equals u.skillid
into temp
from u in temp.DefaultIfEmpty()
select new {
Skill=s.displayname,
HasSkill= us.skillid == NULL ? "0" : "1"
}