C#如何在 linq 中有多个表联接执行左的联接

发布时间: 2017/2/27 3:32:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下几点 LinQ 查询︰

List<string> emails = (from u in context.User
                            join h in context.Hero
                            on u.UserID equals h.UserID
                            join hc in context.HeroCategory
                            on h.HeroID equals hc.HeroID
                            where
                            (hc.QuestionCategoryID == 1
                            && h.IsHeroAdmin) || h.IsHeroSuperAdmin
                            select u.EmailAddress).ToList<string>();

我试图获取列表的电子邮件,属于某一类别的英雄他是管理员和英雄是超级管理员。

当我试着写上述查询 sql 使用左的联接,得到正确的结果︰

SELECT 
    U.EmailAddress
FROM USERS U LEFT JOIN
    Heroes H ON (U.UserID=H.UserID) LEFT JOIN
    HeroCategory HC ON (H.HeroID=HC.HeroID)
WHERE (HC.QuestionCategoryID=1 AND H.IsHeroAdmin=1)
   OR H.IsHeroSuperAdmin=1

基本上我想要知道要执行一个简单的左的联接在上面提到的 linq 查询。

解决方法 1:

这样的事情,但你应该照顾的空值在哪里子句,因为如果你正在做 left join 然后为什么你要筛选,不考虑 null 值?:

List<string> emails = (from u in context.User
                       join h in context.Hero on u.UserID equals h.UserID into hleft
                       from hl in hleft.DefaultIfEmpty()
                       join hc in context.HeroCategory on hl.HeroID equals hc.HeroID into hcleft
                       from hcl in hcleft.DefaultIfEmpty()
                       where
                       (hcl.QuestionCategoryID == 1
                       && hl.IsHeroAdmin) || hl.IsHeroSuperAdmin
                       select u.EmailAddress).ToList<string>();
官方微信
官方QQ群
31647020