次の状況: クロステーブル (mergeSet) として機能する配列が存在します。さらに、ターゲット値のセットとソース値のセットが存在します。ソース値は、クロステーブルを介してターゲット値と結合できます。- しかし、LINQ 式を 1 つだけ使用して、たとえば 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);