This is certainly possible, although I used Intersect, Except, and Union instead of the left join. I hope this is acceptable:
var both = list1.Intersect(list2);
var ret = both
.Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "HOT" })
.Union(
list1.Union(list2).Distinct()
.Except(both)
.Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "NORMAL" })
)
LinqPad Test:
var list1 = new [] {
new { SerialNumber = 1, PartNumber = "A" },
new { SerialNumber = 2, PartNumber = "B" },
};
var list2 = new [] {
new { SerialNumber = 1, PartNumber = "A" },
new { SerialNumber = 2, PartNumber = "B" },
new { SerialNumber = 3, PartNumber = "C" },
new { SerialNumber = 4, PartNumber = "D" },
};
var both = list1.Intersect(list2);
both
.Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "HOT" })
.Union(
list1.Union(list2).Distinct()
.Except(both)
.Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "NORMAL" })
)
.Dump();
Return:
SerialNumber PartNumber Status
1 A HOT
2 B HOT
3 C NORMAL
4 D NORMAL
source
share