需要将LINQ查询从正常连接转换为右外连接

本文关键字:连接 转换 常连接 LINQ 查询 | 更新日期: 2023-09-27 18:10:11

我有以下查询:

var poll = entities.Polls.Join(entities.Descriptors, p => p.DescriptorID, q => q.ID, (p, q) => new
                {
                    Poll = p,
                    Descriptor = q
                }).Join(entities.Media1, p => p.Descriptor.MediaID, q => q.ID, (p, q) => new
                    {
                        Poll = p.Poll,
                        Descriptor = p.Descriptor,
                        Media = q
                    }).Join(entities.PollCommentSettings,p => p.Poll.ID,q => q.PollID,(p,q) => new
                        {
                            Poll = p.Poll,
                            Descriptor = p.Descriptor,
                            Media = p.Media,
                            CommentSettings = q
                        }).FirstOrDefault(p => p.Poll.ID == request.PollID);

我遇到的问题是,正在连接的两个表可能没有对象,但我不在乎,并希望仍然创建我的顶级对象。

如果没有匹配,两个PollCommentSettings和Media1表将导致不返回任何结果。我需要的是最后一个对象,如果没有找到它们,就把它们设为空。

需要将LINQ查询从正常连接转换为右外连接

我想我知道如何通过在LINQpad中尝试一些东西来完成我需要的。我得到了下面的查询,我相信完成了我正在寻找的。

from poll in Polls join descriptor in Descriptors on poll.DescriptorID equals descriptor.ID into pdj
from descriptor in pdj.DefaultIfEmpty()
join media in Media1 on descriptor.MediaID equals media.ID into dmj
from media in dmj.DefaultIfEmpty()
join commentSetting in PollCommentSettings on poll.ID equals commentSetting.PollID into  pcj
from commentSetting in pcj.DefaultIfEmpty()
where poll.ID == 28
select new
{
    poll,
    descriptor,
    media,
    commentSetting
}