【问题标题】:How to write left-join with a case in Linq (C# MVC)如何在 Linq (C# MVC) 中用 case 编写左连接
【发布时间】:2019-04-17 16:02:01
【问题描述】:

如何在 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
            });

【问题讨论】:

标签: c# sql entity-framework left-join


【解决方案1】:

您可以尝试使用linqDefaultIfEmpty() 制作LEFT JOIN

然后将select与三元运算符一起使用,使CASE WHEN

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"
}

【讨论】:

  • DefaultIfEmpty() 是什么将其“变成”左连接而不是内连接?
  • 等一下,us 是什么 - 是第 2 行的吗?我猜这应该是“加入我们”。
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2021-08-15
相关资源
最近更新 更多