using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
var oldList = new List<int?> { 2, 3, 4, 5 };
var newList = new List<int?> { 1, 2 };
var result = from all in oldList.Union(newList).OrderBy(num => num)
join o in oldList on all equals o into gjOld
from oldOuter in gjOld.DefaultIfEmpty((int?)null)
join n in newList on all equals n into gjNew
from newOuter in gjNew.DefaultIfEmpty((int?)null)
select new { newVal = newOuter, oldVal = oldOuter };
foreach(var x in result)
Console.WriteLine("newVal: {0} oldVal: {1}", x.newVal, x.oldVal);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICAgdmFyIG9sZExpc3QgPSBuZXcgTGlzdDxpbnQ/PiB7IDIsIDMsIDQsIDUgfTsKICAgICAgICB2YXIgbmV3TGlzdCA9IG5ldyBMaXN0PGludD8+IHsgMSwgMiB9OwogICAgICAgIHZhciByZXN1bHQgPSBmcm9tIGFsbCBpbiBvbGRMaXN0LlVuaW9uKG5ld0xpc3QpLk9yZGVyQnkobnVtID0+IG51bSkKICAgICAgICAgICAgICAgICAgICAgam9pbiBvIGluIG9sZExpc3Qgb24gYWxsIGVxdWFscyBvIGludG8gZ2pPbGQKICAgICAgICAgICAgICAgICAgICAgZnJvbSBvbGRPdXRlciBpbiBnak9sZC5EZWZhdWx0SWZFbXB0eSgoaW50PyludWxsKQogICAgICAgICAgICAgICAgICAgICBqb2luIG4gaW4gbmV3TGlzdCBvbiBhbGwgZXF1YWxzIG4gaW50byBnak5ldwogICAgICAgICAgICAgICAgICAgICBmcm9tIG5ld091dGVyIGluIGdqTmV3LkRlZmF1bHRJZkVtcHR5KChpbnQ/KW51bGwpCiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBuZXcgeyBuZXdWYWwgPSBuZXdPdXRlciwgb2xkVmFsID0gb2xkT3V0ZXIgfTsKICAgICAgICAgZm9yZWFjaCh2YXIgeCBpbiByZXN1bHQpCiAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgibmV3VmFsOiB7MH0gb2xkVmFsOiB7MX0iLCB4Lm5ld1ZhbCwgeC5vbGRWYWwpOwoJfQp9