简体   繁体   English

LINQ右连接和左连接

[英]LINQ right join and left join

My task is refactor some t-sql queries to LINQ. 我的任务是将一些t-sql查询重构为LINQ。 Simple join and left outer join are clear. 简单连接和左外连接都很清楚。 Here is my code: 这是我的代码:

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)

The output is: 输出是:

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

This is a simple left join. 这是一个简单的左连接。 Now I would like to add a new dataset: 现在我想添加一个新的数据集:

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

The desired output is: 所需的输出是:

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

How can I reformat the LINQ to solve this output? 如何重新格式化LINQ以解决此输出? Thanks 谢谢

Try this: 试试这个:

string[] all = {"a", "b", "c", "d", "e"};
string[] left = {"a", "b"};
string[] right = {"c", "d", "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);

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

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