Преобразование "is null" в оператор linq to sql - PullRequest
2 голосов
/ 02 февраля 2009

У меня проблемы с репликацией следующего sql как оператора LINQ

select TableA.* from TableA left outer join TableAinTableB on TableA.Id = TableAId where TableBId is null

следующие строки не возвращаются

from TableA in db.TableA join AinB in db.TableAinTableB on TableA.Id equals TableAId where AinB.TableBId == null select TableA

Также пробовал и несколько других вещей, которые не работали.

from TableA in db.TableA join AinB in db.TableAinTableB on TableA.Id equals TableAId where AinB == null select TableA

TableAinTableB - это таблица многих ко многим. Запрос, который я хочу, вытянет все записи из таблицы А, у которых нет записей в средней таблице. Мой SQL делает то, что я хочу, но я не знаю, как преобразовать его в LINQ для SQL.

Я закончил работать над этим, просто выполнив db.ExecuteQuery ("рабочий sql"); Но я хотел бы знать, возможен ли запрос в LINQ и как его написать, или указатель на документ, который охватывает этот сценарий. Мой поиск не нашел ничего, что я нашел полезным.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2009

Вы можете использовать DefaultIfEmpty для имитации внешнего соединения. Проверьте это образец .

В вашем примере это что-то вроде:

var q = from a in TableA
            join b in TableB on a.Id equals b.Id into g
            from b in g.DefaultIfEmpty()
            select a;
1 голос
/ 15 марта 2009

Для "IS NULL" попробуйте что-то вроде этого

from TableA in db.TableA 
join AinB in db.TableAinTableB 
on TableA.Id equals TableAId 
where object.Equals(AinB.TableBId, null)
select TableA;
0 голосов
/ 20 июня 2012

Вы также можете использовать ExecuteQuery метод LINQ, например:

string query = "select TableA.* from TableA left outer join TableAinTableB on TableA.Id = TableAId where TableBId is null";
TestDataContext db = new TestDataContext();
IEnumerable<TableA> objUser = db.ExecuteQuery<TableA>(query).ToList();

где TestDataContext - это LINQ-to-SQL DataContext для базы данных, в которой отображается TableA.

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