linq中的连接问题
我有以下几张表linq中的连接问题,linq,linq-to-sql,Linq,Linq To Sql,我有以下几张表 T1 ==== ====== ID Desc ==== ====== 1 t1 2 t2 3 t3 4 t4 T2 ===== ======= ======== ID T1ID PT1ID ===== ====== ========= 1 2 1 2 3
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的行,因为它在两个外键列中都没有任何匹配的行我不是100%清楚您想要做什么 我假设您希望返回T1中的所有行以及T2中的任何匹配行,其中列T1ID或PT1ID值等于T1 ID列
如果是这种情况,则需要外部联接。如果您的问题是执行外部联接,则可以从中获得外部联接的一个很好的示例: 如果您的问题是返回差异:
msdn.microsoft.com/en us/library/bb386962.aspx这应该是您想要的:
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();
}
}
你是说你需要一个外部连接吗?如果你能显示你的linq代码,那会很有帮助。我想他的意思是从不存在的T1中选择*,从T2中选择*,其中T2.T1ID=T1.ID,不存在从T2中选择*,其中T2.PT1ID=T1.ID-除了在linq中