【发布时间】: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
});
【问题讨论】:
-
对于左连接,您需要使用 DefaultIfEmpty d
var result = ( from e in entries from r in results.Where(x => x.PropertyId == e.PropertyId) .Where(x => e.ValueAsString.Equals(x.Value, StringComparison.InvariantCultureIgnoreCase)) .DefaultIfEmpty() select new { Result = r, Entry = e } ) .ToList(); -
@RobertHarvey 我已经看到了这些问题。感谢您的帮助。
标签: c# sql entity-framework left-join