我的任务是将一些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
解决方法
试试这个:
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);