проблема присоединения в linq - PullRequest
2 голосов
/ 04 октября 2010

у меня есть следующие таблицы

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, так как в обоих столбцах внешнего ключа нет соответствующей строки

Ответы [ 3 ]

1 голос
/ 04 октября 2010

Если ваша проблема заключается в выполнении внешнего объединения: http://msdn.microsoft.com/en-us/library/bb399397.aspx

Если ваша проблема заключается в возврате различий: msdn.microsoft.com/en-us/library/bb386962.aspx

1 голос
/ 04 октября 2010

Это должно хотеть, чтобы вы хотели:

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();
    }
}
1 голос
/ 04 октября 2010

Я не на 100% понимаю, что вы пытаетесь сделать.

Я предполагаю, что вы хотите вернуть все строки из T1 и любые соответствующие строки из T2, где значения столбца T1ID или PT1ID равны столбцу T1 ID.

Если это так, вам нужно внешнее соединение. Хороший пример внешних объединений можно найти на форумах MSDN microsoft

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...