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中