c# – LINQ右连接和左连接

我的任务是将一些t-SQL查询重构为LINQ.简单连接和左外连接都很清楚.这是我的代码

string[] leftouter = new string[] { "a","b","c","d","e" };
string[] inner     = new string[] { "a","b" };

var q = from s1 in leftouter
        join s2 in inner on s1 equals s2 into j
        from sj in j.DefaultIfEmpty() 
        select string.Format("Outer: {0} Left: {1}",s1,sj)

输出是:

Outer: a Left: a  
Outer: b Left: b  
Outer: c Left:   
Outer: d Left:   
Outer: e Left:

这是一个简单的左连接.现在我想添加一个新的数据集:

string[] rightouter = new string[] { "c","e" };

所需的输出是:

Outer: a Left: a Right:  
Outer: b Left: b Right:  
Outer: c Left:   Right: c
Outer: d Left:   Right: d
Outer: e Left:   Right: e

如何重新格式化LINQ以解决输出?谢谢

解决方法

试试这个:

string[] all = {"a","e"};
string[] left = {"a","b"};
string[] right = {"c","e"};

var q = from innerItem in all
        join leftItem in left on innerItem equals leftItem into leftItems
        join rightItem in right on innerItem equals rightItem into rightItems
        from a in leftItems.DefaultIfEmpty()
        from b in rightItems.DefaultIfEmpty()
        select string.Format("Outer: {0} Left: {1} Right: {2}",innerItem,a,b);

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...