powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как эффективно выполнить LINQ-запрос к MS SQL ?
3 сообщений из 3, страница 1 из 1
Как эффективно выполнить LINQ-запрос к MS SQL ?
    #39305926
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая структура

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public class dialog
    {
        public virtual ICollection<users> members { get; set; }

        public virtual ICollection<users> readers { get; set; }
    }

    public class user
    {
        public virtual ICollection<dialog> membersOf { get; set; }

        public virtual ICollection<dialog> readersOf { get; set; }
    }

    user user = getUser();



Есть собственно юзер.

Нужно выбрать только те диалоги, где юзер есть в membersOf и нет в readersOf . Причем нужно из БД только получить результат (число диалогов), не вытягивая всё на клиента (сервер).

1. Как удостовериться, что на клиента (сервер) ничего не вытягивается (желательно подешевле)
2. Как составить запрос, который выполниться полностью в БД?


Сейчас это выглядит так:

Код: c#
1.
var new_dialogs = user.membersOf .Where(x => !x.is_deleted).Where(x => !x.readersOf .Select(z => z.userID).Contains(user.id)).Count();
...
Рейтинг: 0 / 0
Как эффективно выполнить LINQ-запрос к MS SQL ?
    #39305998
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueСейчас это выглядит так:

Неправильно, ты делаешь запрос к навигационному свойству, а надо делать запрос через контекст.

Код: c#
1.
var new_dialogs = dbContext.users.Select(x => x.id == <ID юзера>).SelectMany(x => x.membersOf).Where(x => !x.is_deleted).Where(x => !x.readersOf .Select(z => z.userID).Contains(user.id)).Count();



Monochromatique1. Как удостовериться, что на клиента (сервер) ничего не вытягивается (желательно подешевле)

Посмотреть в отладчике, или вывести в лог.

Monochromatique2. Как составить запрос, который выполниться полностью в БД?

Через контекст. Только через контекст. Когда обращаешься к навигационной сущности экземпляра, она инстанцируется (коллекция материализуется), и ты получаешь SELECT N+1.
...
Рейтинг: 0 / 0
Как эффективно выполнить LINQ-запрос к MS SQL ?
    #39306109
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttMonochromatiqueСейчас это выглядит так:

Неправильно, ты делаешь запрос к навигационному свойству, а надо делать запрос через контекст.

Код: c#
1.
var new_dialogs = dbContext.users.Select(x => x.id == <ID юзера>).SelectMany(x => x.membersOf).Where(x => !x.is_deleted).Where(x => !x.readersOf .Select(z => z.userID).Contains(user.id)).Count();



Monochromatique1. Как удостовериться, что на клиента (сервер) ничего не вытягивается (желательно подешевле)

Посмотреть в отладчике, или вывести в лог.

Monochromatique2. Как составить запрос, который выполниться полностью в БД?

Через контекст. Только через контекст. Когда обращаешься к навигационной сущности экземпляра, она инстанцируется (коллекция материализуется), и ты получаешь SELECT N+1.

Понял тебя.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как эффективно выполнить LINQ-запрос к MS SQL ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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