我有以下表格
T1
==== ======
ID Desc
==== ======
1 t1
2 t2
3 t3
4 t4
T2
===== ======= ========
ID T1ID PT1ID
===== ====== =========
1 2 1
2 3 2
在T2中,T1ID和PT1ID都是T1的外键。在我的输出中,我想要ID = 4的行,因为它在两个外键列中没有任何匹配的行
答案 0 :(得分:1)
我不是100%清楚你想要做什么。
我假设您要返回T1中的所有行以及来自T2的所有匹配行,其中列T1ID或PT1ID值等于T1 ID列。
如果是这种情况,则需要外连接。您可以从MSDN microsoft Forums
获得外部联接的一个很好的示例答案 1 :(得分:1)
如果您的问题是要进行外部联接: http://msdn.microsoft.com/en-us/library/bb399397.aspx
如果你的问题是要回归差异: msdn.microsoft.com/en-us/library/bb386962.aspx
答案 2 :(得分:1)
这应该是你想要的:
var notInT2 = T1.Where(i => T2.All(e => e.T1ID != i.Id) &&
T2.All(e => e.PT1ID != i.Id));
测试它:
class RowT1 { public Int32 Id;}
class RowT2 { public Int32 T1ID; public Int32 PT1ID; }
class Programm
{
static void Main()
{
var T1 = new List<RowT1>(){new RowT1(){Id=1},
new RowT1(){Id=2},
new RowT1(){Id=3},
new RowT1(){Id=4}};
var T2 = new List<RowT2>(){new RowT2(){T1ID=2, PT1ID=1},
new RowT2(){T1ID=3, PT1ID=2}};
var notInT2 = T1.Where(i => T2.All(e => e.T1ID != i.Id) &&
T2.All(e => e.PT1ID != i.Id));
Console.ReadLine();
}
}