|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
То ли задачка то ли оказалась нетривиальной, то ли я где-то сильно затупил. Вот запрос на SQL Код: sql 1. 2. 3. 4. 5.
У покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара. При попытке написать на Linq2EF я либо получаю NullReferrenceException при попытке второго джойна (так как нет объекта, из которого надо достать id), либо отбор несколькими запросами, при этом внутренних таблиц не производится фильтрация в БД, то есть на клиента приходят все заказы и все товары и только потом фильтруются. В общем, как написать этот запрос для EF? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 11:34 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro, покажи пример, что пишешь ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 12:46 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Сначала замутил что-то такое: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Потом такое: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 13:26 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
в первом накосячил, когда пример делал: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 14:01 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro, а чё, нету навигационных полей, типа customer.Order? если есть, решается ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:31 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
похоже на то, что запрос материализуется сразу, а не транслируется в SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:33 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttа чё, нету навигационных полей, типа customer.Order? если есть, решаетсяПоля есть (не customer.Order, а customer.Orders разумеется), но с ними совсем не взлетает. Гуглил, как я понял проблема сгенерить проекцию с нормальными джойнами, не получив N+1 запросов к базе, не решена (точнее решена в каком-то очень частном случае и только с одним уровнем джойна). Может ты подскажешь как? hVosttпохоже на то, что запрос материализуется сразу, а не транслируется в SQLНет, в первом случае я получаю ровно один запрос к базе. Во втором N-1 (по количеству вложенных уровней), что тоже устраивало бы, только нижние уровне не фильтруются на уровне запроса к БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:39 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Code First, EF Core ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:40 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProCode First, EF Core А, Core... понятно. Именно EF он ещё очень сырой, при чём настолько, что практически неюзабельно. Половина проекций не работает, группировка? давай досвидания... Миграции, как повезёт вообще, да и не работают толком как в EF 6. Только SELECT N+1, советовал бы уйти на другой провайдер, в версии EF Core от него пользы как от козла молока. Ещё годик другой может. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:43 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProУ покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара.нет логики в запросе. Как заказ без товаров? Покажи тест запроса на базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 16:56 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVostt, Проверить, core виноват или нет, не долго. В демке на ef6. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:04 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProУ покупателя может не быть заказов, либо у заказов может не быть товаров, в этом случае я должен получить только поля покупателя и NULL для полей заказа и товара. Либо запрос к товарам а не к покупателям. Либо запрос к покупателям с агрегацией и сведением количества заказов. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:09 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123нет логики в запросе.не ищи логику, это пример, а не рабочий код, хочешь - в зайцев перепиши. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:25 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123нет логики в запросе.не ищи логику, это пример, а не рабочий код, хочешь - в зайцев перепиши. А что ее искать, если запрос не к той сущности. Запрос должен быть логичен, а не джойнить все подряд. Логично? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:29 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
hVosttА, Core... понятно. Именно EF он ещё очень сырой, при чём настолько, что практически неюзабельно. Половина проекций не работает, группировка? давай досвидания... Миграции, как повезёт вообще, да и не работают толком как в EF 6.Ну интересно, они что, с нуля его писали? Я полагал, большинство кода взято все-таки с EF6. Ну и не могу же я юзать EF6 под ASP.NET Core. Опять же - задача-то абсолютно тривиальная - два Left Joina. Ну а как это решается в EF6? hVosttсоветовал бы уйти на другой провайдер, в версии EF Core от него пользы как от козла молока. Ещё годик другой может.вот это не совсем понял ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:29 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123А что ее искать, если запрос не к той сущности. Запрос должен быть логичен, а не джойнить все подряд. Логично?Не логично, я не буду тратить время, расписывая тебе реальную бизнес-модель полдня. Есть конкретная выборка, которую я хочу получить - два вложенных отношения один-ко-многим, названия сущностей можешь свои подставить, если тебя коробит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:32 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Proдва вложенных отношения один-ко-многим, Сторону Многие сворачиваем через count? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:37 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Pro, Список чего тебя интересует? Товаров? Заказов? Клиентов? Может Много ко Много отношения? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:40 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123Сторону Многие сворачиваем через count?Да блин, ничего не сворачиваем, я же пример написал на SQL - ты видишь там Count? В итоге мне нужно загрузить иерархическую модель в дерево. Я конечно могу написать это ручками тремя запросами послойно, если нет другого выхода, но странно, если его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:42 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.Proя же пример написал на SQL -я просил тест к базе и 5 строк результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:44 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProДа блин, ничего не сворачиваем, я Блин! )))) Если не сворачивать, то запрос к отношению Много! Т.е. from Заказы! Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:47 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Ну или Right, outer, left, ....чообы null появились. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:50 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123Т.е. from Заказы!Какая разница между FROM Заказы RIGHT JOIN Покупатели и FROM Покупатели LEFT JOIN Заказы Если тебе не нравится LEFT JOIN перепиши на RIGHT JOIN - суть не поменяется Базовая таблица - Покупатели в данном случае ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:51 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Shocker.ProБазовая таблица - Покупатели в данном случае Дело твоё. Возможно парсер линка не такой крутой как парсер субд. Чтобы понимать что такое базовая таблица. Я бы сделал тест в базе. Потом на ef6. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2018, 17:58 |
|
EF: Как грамотно написать на LINQ запрос для EF с двумя или более LEFT JOIN
|
|||
---|---|---|---|
#18+
Petro123hVostt, Проверить, core виноват или нет, не долго. В демке на ef6. Чё проверять, я знаю, что представленный код шокером, работает на EF6, без каких-то проблем. Мы пытались заюзать EF Core для небольшого проекта и встретили такую гору проблем, что решили, что пока как-нибудь без него. Взяли даппер. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2018, 07:59 |
|
|
start [/forum/topic.php?fid=17&fpage=5&tid=1349207]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 161ms |
0 / 0 |