Форум программистов, компьютерный форум, киберфорум
Наши страницы
LINQ
Войти
Регистрация
Восстановить пароль
 
ArminAmarr
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 1
1

GroupJoin генерирует множество запросов к БД

21.09.2015, 00:49. Просмотров 398. Ответов 1
Метки нет (Все метки)

Попробовал использовать LinqConnect to PostgreSQL от DevArt, написал простой GroupJoin и очень удивился результатам в dbMonitor.

C#
1
2
3
4
5
6
7
context.Cities.GroupJoin(
    context.Unis, 
    c => c.Id, 
    u => u.IdCity, 
    (c, us) => new {c.Name, Names = us.Select(u => u.Name)})
    .ToList()
    .ForEach(x => Console.WriteLine(x.Name + x.Names.DefaultIfEmpty().Aggregate((a, b) => a + ", " + b)));
Для каждого города выполняется запрос
SQL
1
2
3
SELECT t1."name"
FROM public.uni t1
WHERE :np0 = t1.id_city
Подскажите, плз, можно ли как-то изменить эту конструкцию так, чтобы на сервере выполнился 1 запрос?

Добавлено через 6 часов 2 минуты

Добавлено через 1 минуту
Хорошее решение найдено на http://stackoverflow.com/questions/5...ension-methods
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var q = context.Cities.SelectMany
(
    с => context.Unis.Where(u => с.Id == u.IdCity).DefaultIfEmpty(),
    (c, u) => new {
        CityName = c.Name,
        UniName = (u != null ? u.Name : "None")
    }
);
 
foreach (var item in q)
    Console.WriteLine(item.CityName + ": " + item.UniName); 
            Console.ReadLine();
 
        }
    }
В этом случае генерируется 1 запрос к БД
SQL
1
2
3
4
5
6
7
SELECT t1."name" AS "Name", 
    (CASE 
        WHEN NOT (t2.id IS NULL) THEN t2."name"
        ELSE :p0
     END) AS "C1"
FROM public.city t1
LEFT OUTER JOIN public.uni t2 ON t1.id = t2.id_city
Странно что на всех форумах и в книгах предлагают использовать GroupJoin, хотя он явно уступает в производительности.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2015, 00:49
Ответы с готовыми решениями:

Объясните механику работы селектора GroupJoin
Прочел тут https://msdn.microsoft.com/ru-ru/library/bb534297%28v=vs.110%29.aspx...

Найти множество, которое генерирует пространство
Обозначим V как множество всех реальных матриц типа 2х3 таких, что сумма всех...

Вирус на Джумле генерирует множество страниц, которые индексируются
Пример: http://krovlikubani.ru/e09f8we2 Где запрятан вирус, не понятно, но уже...

Множество запросов
День добрый Столкнулся в очередной раз с проблемой гибкости приложения....

Множество запросов mysqli
Есть допустим необходимость, записать в БД сразу много записей. Если я делаю...

1
kolorotur
Эксперт .NET
10699 / 8861 / 2217
Регистрация: 17.09.2011
Сообщений: 15,243
Завершенные тесты: 1
30.09.2015, 10:24 2
ArminAmarr, у вас проблема была в том, что после выполнения запроса (ToList) вы делаете еще и выборку по связной коллекции Names, в итоге из-за ленивой загрузки для каждой строки выполнялся еще один запрос в базу для извлечения имен.
При создании запроса можете сразу указать, чтобы хваталась связная таблица:
C#
1
context.Cities.Include(c => c.Names).GroupJoin(...
Тогда будет один запрос.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 10:24

Множество ajax запросов
Всем привет! Существует ли какое-нибудь ограничение на количество ajax...

Как сократить множество запросов?
Возможно ли сократить каким-нибудь образом эти запросы? $a =...

Как отправить множество запросов серверу с определенным интервалом
У меня в скрипте есть цикл, который должен отправить 5000 запросов серверу. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru