简体   繁体   English

需要将LINQ查询从Normal JOIN转换为RIGHT OUTER JOIN

[英]Need to turn LINQ Query from Normal JOIN into RIGHT OUTER JOIN

I have the following query: 我有以下查询:

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);

The problem I am having is that two of the tables that are being joined on might not have an object, but I do not care, and want to still create my top level object. 我遇到的问题是,要连接的两个表可能没有对象,但是我不在乎,并且仍然想创建我的顶级对象。

The two PollCommentSettings and Media1 tables cause this to return nothing if there is no match. 如果没有匹配项,则两个PollCommentSettings表和Media1表将导致此表不返回任何内容。 What I need to have is the final object to just set these to null if they were not found. 我需要的是最终对象,如果找不到它们,则将它们设置为null。 I believe this is a right outer join on both of these tables. 我相信这是这两个表的正确外部连接。

I think I figured out how to accomplish what I need by trying some stuff out in LINQpad. 我想我想出了如何通过在LINQpad中尝试一些东西来完成我所需要的。 I got the following query which I believe accomplishes what I am looking for. 我得到以下查询,我相信它可以满足我的要求。

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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM