0

我有以下查询:

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 表会导致它不返回任何内容。我需要的是最后一个对象,如果没有找到它们,只需将它们设置为 null。我相信这是这两个表上的右外连接。

4

1 回答 1

1

我想我想出了如何通过在 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
}
于 2013-04-22T05:06:02.473 回答