C# 使用LINQ在两个字典上进行左外连接

C# 使用LINQ在两个字典上进行左外连接,c#,linq,join,C#,Linq,Join,我正在尝试使用两个Dictionary对象进行左外连接。这些是对象: var leftSet = new Dictionary<int, string>() { { 1, "Michael"}, { 2, "John" }, { 3, "Bill" } }; var rightSet = ne

我正在尝试使用两个Dictionary对象进行左外连接。这些是对象:

            var leftSet = new Dictionary<int, string>()
            {
                { 1, "Michael"},
                { 2, "John" },
                { 3, "Bill" }
            };

            var rightSet = new Dictionary<int, string>()
            {
                { 1, "Another Michael"},
                { 3, "Another Bill" },
                { 4, "Tony" }
            };
这会产生一个内部连接,而不是我想要的左外部连接。我知道我需要在leftElements.Key成为joinResult的一部分之前获取它,但之后我不知道如何编写select语句

任何帮助都将不胜感激,谢谢。

更改

 from result in joinResult
致:

完成左外连接

其他一切都可以保持不变。

改变

 from result in joinResult
致:

完成左外连接


其他一切都可以保持不变。

谢谢!这是可行的,但我正试着弄清楚为什么会这样。我在joinResult.DefaultIfEmpty执行之后检查了结果,结果包含三个元素,其中{2,John}不是成员。所以我不明白select语句是从哪里获取的。@InvalidBrainException好问题!。因为我现在很忙,我会告诉你两件事,你应该读,而且不会花太长时间,第一件是,第二件是。@IvalidBrain例外,如果你在读了这两件事后仍然感到困惑,那么请留下评论,我有空的时候会给你回复。虽然在英国时间有点晚了,所以我不确定什么时候能给你回复:。谢谢你的链接-我已经读过了,对我来说主要的收获是一个后跟DefaultIfEmpty的连接就是如何在LINQ中完成左外连接的。这基本上就是第一个链接的第二段所说的!但是,当我将其分解并研究查询的每一行的结果时,joinResult.DefaultIfEmpty的结果不包含元素{2,John},但最后的select以某种方式将其返回!我的直觉是LINQ在幕后做了一些聪明的事情。谢谢你迄今为止的帮助。谢谢!这是可行的,但我正试着弄清楚为什么会这样。我在joinResult.DefaultIfEmpty执行之后检查了结果,结果包含三个元素,其中{2,John}不是成员。所以我不明白select语句是从哪里获取的。@InvalidBrainException好问题!。因为我现在很忙,我会告诉你两件事,你应该读,而且不会花太长时间,第一件是,第二件是。@IvalidBrain例外,如果你在读了这两件事后仍然感到困惑,那么请留下评论,我有空的时候会给你回复。虽然在英国时间有点晚了,所以我不确定什么时候能给你回复:。谢谢你的链接-我已经读过了,对我来说主要的收获是一个后跟DefaultIfEmpty的连接就是如何在LINQ中完成左外连接的。这基本上就是第一个链接的第二段所说的!但是,当我将其分解并研究查询的每一行的结果时,joinResult.DefaultIfEmpty的结果不包含元素{2,John},但最后的select以某种方式将其返回!我的直觉是LINQ在幕后做了一些聪明的事情。谢谢你迄今为止的帮助。
 from result in joinResult.DefaultIfEmpty()