如果第二个或第三个表为空,则LINQ Join不返回结果

Kam*_*din 4 c# linq asp.net join

我有3张桌子:

Module_Articles_Articles
Module_Articles_Categories
Module_Articles_Comments
Run Code Online (Sandbox Code Playgroud)

我想在转发器中显示我的文章我的查询:

var articles =
                (from a in context.Module_Articles_Articles
                 join c in context.Module_Articles_Categories on a.CategoryID equals c.CategoryID
                 join co in context.Module_Articles_Comments on a.ArticleID equals co.ArticleID
                 where a.IsDraft == false
                 orderby a.ArticleID descending
                 select new
                 {
                     a.ArticleID,
                     a.ArticleTitle,
                     a.ArticleContent,
                     a.Image,
                     a.Sender,
                     a.SentDate,
                     a.Summary,
                     a.Likes,
                     a.Dislikes,
                     a.Tags,
                     a.PostMode,
                     c.CategoryID,
                     c.CategoryTitle,
                     AcceptedCommentsCount = 
                     (from com in context.Module_Articles_Comments where com.ArticleID == a.ArticleID && com.Status select com)
                     .Count(),
                     DeniedCommentsCount =
                     (from com in context.Module_Articles_Comments where com.ArticleID == a.ArticleID 
                          && com.Status == false select com)
                     .Count()
                 }).ToList();
Run Code Online (Sandbox Code Playgroud)

但当Module_Articles_CategoriesModule_Articles_Comments为空时,我的查询什么也没有返回!我的代码是真的吗?如果不是我怎么能这样做?

Sco*_*lby 7

你想要一个OUTTER JOIN,这可以通过简单的添加在这样的查询中完成 .DefaultIfEmpty()

from a in context.Module_Articles_Articles
join c in context.Module_Articles_Categories on a.CategoryID equals c.CategoryID into ca
from c in cs.DefaultIfEmpty()
join co in context.Module_Articles_Comments on a.ArticleID equals co.ArticleID into com
from co in com.DefaultIfEmpty()
where a.IsDraft == false
orderby a.ArticleID descending
select new ...
Run Code Online (Sandbox Code Playgroud)