又一個解決方案:
var list1 = new List<string> { "Abc", "Xyz", "BlahBlah" };
var list2 = new List<string> { "Abc", "Xyz", "YadiYada" };
var r1 = from l1 in list1
join l2 in list2 on l1 equals l2 into t
from l2 in t.DefaultIfEmpty()
select new { l1, l2 };
var r2 = from l2 in list2
join l1 in list1 on l2 equals l1 into t
from l1 in t.DefaultIfEmpty()
select new { l1, l2 };
var result = r1.Union(r2);
Left Outer Join
這是使用方法的語法的替代:
var list1 = new List<string> { "Abc", "Xyz", "BlahBlah" };
var list2 = new List<string> { "Abc", "Xyz", "YadiYada" };
var r1 = list1
.GroupJoin(
list2,
l1 => l1,
l2 => l2,
(l1, l2) => new { l1 = l1, l2 = l2.FirstOrDefault() });
var r2 = list2
.GroupJoin(
list1,
l2 => l2,
l1 => l1,
(l2, l1) => new { l1 = l1.FirstOrDefault(), l2 = l2 });
var result = r1.Union(r2);
LINQ Query Syntax versus Method Syntax
一般來說,我們推薦查詢語法,因爲它通常更簡單 和更具可讀性;然而, 方法語法與查詢語法之間沒有語義上的區別。另外,一些查詢,如 那些檢索與指定的 條件相匹配的元素數或者檢索源序列中具有最大值的元素的查詢只能表示爲方法調用。
提供迄今已嘗試過的[mcve],以便在需要時提供幫助。 – Nkosi
集合論呢? 'union'他們然後'.except()'通過他們的'intersect'?而'intersect'會給你匹配,這種方法會給你所有的不匹配。 - ((列表A)U(列表B)) - ((列表A)∩(列表B))' –
@BagusTesa,我知道你要去哪裏,但這隻給我那些沒有不包含在另一個列表中,這只是答案的一部分。我還需要那些僅在List1中的項目和僅在List2中的項目。這有助於讓我走上正軌! – Jiveman