Как я могу получить все записи с 1-2 запросами, используя обычный SQL и Linq-To-Entities? - PullRequest
0 голосов
/ 07 мая 2011

Я загрузил упрощенную SQL ERD в Picasa. Я пытался это сделать, но мне удалось выполнить более 2 запросов.

Мне нужно извлечь все записи из таблицы D с конкретными E_Id таблицы E и конкретными TypeId таблицы A

ОБНОВЛЕНО : мне также нужно, чтобы все записи из B , которые сопоставлены с TypeId , также были извлечены, даже если не все они сопоставлены в таблице C (какое-то левое правое соединение)

Мне нужно сделать максимум 2 запроса, а затем преобразовать их в оператор Linq-To-Entites. Если это можно сделать с 1 запросом, я предпочитаю 1 запрос

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

SQL-запрос:

SELECT D.*
FROM D 
INNER JOIN C ON C.Id = D.C_Id
INNER JOIN B ON B.Id = C.B_Id
INNER JOIN A ON A.Id = B.A_Id
WHERE D.E_Id = @eId AND A.TypeId = @typeId

SELECT B.*
FROM B
INNER JOIN A ON A.Id = B.A_Id
WHERE A.TypeId = @typeId

Linq напрямую (если свойства навигации не существуют):

var query = from d in context.D
            join c in context.C on c.Id equals d.cId
            join b in context.B on b.Id equals c.bId
            join a in context.A on a.Id equals b.aId
            where d.eId == eId && a.TypeId == typeId
            select d;

var query2 = from b in context.B
             join a in context.A on a.Id equals b.aId
             where a.TypeId == typeId
             select b;

Linq, если свойства навигации установлены правильно:

var query = from d in context.D
            where d.E.Id == eId &&
                  d.C.B.A.TypeId == typeId
            select d;  

var query2 = from b in context.B
             where b.A.TypeId == typeId
             select b; 
0 голосов
/ 07 мая 2011

Любая причина, почему ниже не будет работать для вас?

SELECT D.*
FROM D
INNER JOIN C
ON C.Id = D.C_Id
INNER JOIN B
ON B.Id = C.B_Id
INNER JOIN A
ON A.Id = B.A_Id
WHERE D.E_id = <The E_Id> AND A.Typeid = <The Typeid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...