powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ LEFT JOIN
8 сообщений из 8, страница 1 из 1
LINQ LEFT JOIN
    #37521927
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как в линкю нормальный лефт джойн сделать?

http://msdn.microsoft.com/ru-ru/library/bb397895.aspx
отсюда
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };
Работает, но в профайлере указывается что выполняется лефт джойн, но не таблицы, а подзапроса.
то есть person джоинится так примерно:

people Left Join (select * From Owner) [t2] on условие

Если просто сджойнить к таблице таблицу-справочник людей, и указать ему .DefaultIfEmpty()

получается что-то вроде:
INNER JOIN ((
SELECT NULL AS [EMPTY]
) [t2]
LEFT OUTER JOIN [dbo].[Owners] AS [t3] ON 1=1 ) ON [t0].[FK_Owners] = ([t3].[PK])

первый вариант работает, а второй не выбирает.
---------------------------------------------------------
SET @@verSION = 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6002: Service Pack 2) '
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37521933
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я хочу понять, как на линкье сделать запрос, чтобы вышло
Код: plaintext
1.
2.
Select *
From table1 [t1]
left join table2 [t2] on условие
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37522028
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственный недостаток LINQ - черезжопный left join...

Код: plaintext
1.
2.
3.
4.
from t1 in Db.T1

join t2 in Db.T2 on t1.BlaBlaBlaID equals t2.ID into _t2
from t2 in _t2.DefaultIfEmpty()
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37522260
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕдинственный недостаток LINQ - черезжопный left join...

Код: plaintext
1.
2.
3.
4.
from t1 in Db.T1

join t2 in Db.T2 on t1.BlaBlaBlaID equals t2.ID into _t2
from t2 in _t2.DefaultIfEmpty()

там в профайлере видно, что джоинится с (Select * From t2)

когда таблица маленькая - то ещё нормально, а когда там миллион записей, и нужно вытащить\или вернуть нулл только для одной записи - по производительности сильно бьёт!
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37523412
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmannтам в профайлере видно, что джоинится с (Select * From t2)

когда таблица маленькая - то ещё нормально, а когда там миллион записей, и нужно вытащить\или вернуть нулл только для одной записи - по производительности сильно бьёт!Надо смотреть план выполнения и индексы. Наличие вложенного запроса ещё ничего не значит, причина тормозов не в нём.
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37523594
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего тут план выполнения запроса смотреть?
невооружённым глазом видно, что юзер будет запрашивать миллион записей по сети.
Ему только одну нужно, и всё.
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37524021
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannА чего тут план выполнения запроса смотреть?
невооружённым глазом видно, что юзер будет запрашивать миллион записей по сети.
Ему только одну нужно, и всё.Напишите запрос так, чтобы возвращалось только то что нужно. Всё зависит от Вас. Или Вы и вправду думаете, что MSSQL, встретив вложенный запрос, сначала зачитает его весь во временную таблицу, и только потом будет джойнить? Это не так...
...
Рейтинг: 0 / 0
LINQ LEFT JOIN
    #37524096
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрю на работе план выполнения. такое чувство, что именно так, и происходит.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ LEFT JOIN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]