Фильтрация записей по FK другой таблицы - PullRequest
2 голосов
/ 24 июля 2011

Как мне отфильтровать мой запрос Linq-to-SQL, чтобы он отображал только записи, на которые нет ссылок (через FK) в другой таблице?

Так, например, у меня было две таблицы: TableA и TableB. TableB имел FK, ссылающийся на TableA. Я хочу выбрать все строки из таблицы A, которые не имеют записей в таблице B, ссылающихся на него.

В сыром T-SQL я могу сделать:

SELECT * FROM TableA
WHERE NOT EXISTS (SELECT * FROM TableB WHERE TableA._id = TableB.fk_tablea_id)

В сыром MySQL я могу выполнить левое соединение и использовать функцию ISNULL() в предложении where.

Я не уверен, что лучший способ сделать это с LINQ to SQL.

Ответы [ 4 ]

1 голос
/ 24 июля 2011

Если у вас есть свойства сопоставления (например, EntitySet или EntityRef, отличающиеся отношениями «один ко многим» или «один к одному») в объекте TableA, чтобы вы могли выполнить следующее: Для EntitySet:

var tableAWithoutRelations= (from aRecord in TableAList where aRecord.TableB.Count()==0 select aRecord);

Для EntityRef:

var tableAWithoutRelations= (from aRecord in TableAList where aRecord.TableB==null select aRecord);
1 голос
/ 24 июля 2011

Вы можете сделать следующее:

var ctx = new Context();
var rowAs = from TableA in ctx.TableAs
             where TableA.TableB.Count() > 0
             select TableA;
0 голосов
/ 24 июля 2011

Я думаю, что вы ищете Except -оператор: http://msdn.microsoft.com/en-us/library/bb386962.aspx

var x = (from a in db.TableA
        select a.Column).Except(from b in db.TableB
                               select b.Column);
0 голосов
/ 24 июля 2011

попробуйте

  var result = from A in dbcontext.TableAs
               Where A.TableB == null
               select A;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...