以下情况:存在一个数组作为交叉表(mergeSet)。此外,还存在一组目标值和一组源值。源值可以通过交叉表与目标值连接。- 但是,如何仅使用一个 LINQ 表达式来表达例如 targetSet 与其他表的外连接?
目前我只找到了使用多个 LINQ 表达式的解决方案(即 targetSet+mergeSet+sourceSet 的内部连接,然后是纯左外部部分,最后是 innerJoinResult 和 outerPart 的串联)。
var mergeSet = new[]
{
new KeyValuePair<int, int>(3, 4),
new KeyValuePair<int, int>(5, 6)
};
var targetSet = new[] { 1, 3, 5, 7 };
var sourceSet = new[] { 4, 6 };
var innerJoinResult =
from mergeItem in mergeSet
join sourceItem in sourceSet on mergeItem.Value equals sourceItem
join targetItem in targetSet on mergeItem.Key equals targetItem
group sourceItem by targetItem;
var outerPart =
from targetItem in targetSet
where !mergeSet.Any(mergeItem => mergeItem.Key == targetItem)
group 0 by targetItem; // Fill the right part with zero.
var outerJoinResult = outerPart.Concat(innerJoinResult);