Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Linq(C MVC)中用case编写左连接_C#_Sql_Entity Framework_Left Join - Fatal编程技术网

C# 如何在Linq(C MVC)中用case编写左连接

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 我已经做了几个

如何在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 
我已经做了几个小时了,我真的无法理解这些查询的结构。对于普通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"
}