Как написать левое соединение с регистром в Linq (C # MVC) - PullRequest
1 голос
/ 17 апреля 2019

Как мне написать следующий запрос в 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
            });

1 Ответ

2 голосов
/ 17 апреля 2019

Вы можете попробовать использовать linq с DefaultIfEmpty() make 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"
}
...