powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / IQueryable и Join
14 сообщений из 14, страница 1 из 1
IQueryable и Join
    #37445450
MII
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!

Подскажите, пожалуйста, есть 2 таблицы предположим "Группа" и "Студенты", какой тип указывать у IQueryable при Join запросе?

Пример:
Код: plaintext
1.
2.
3.
4.
5.
public IQueryable<???> getStudent()
{
    return (from s in students 
            join g in group on s.group_id equals g.id
          select new { s.id, s.name, group = g.name});
} 
...
Рейтинг: 0 / 0
IQueryable и Join
    #37445499
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте свой прокси-класс и вмапливайте в него свой результат.
...
Рейтинг: 0 / 0
IQueryable и Join
    #37450528
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или используйте Tuple Class чтоб не создавать промежуточные классы
...
Рейтинг: 0 / 0
IQueryable и Join
    #37450673
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stimpi Tuple Class
Чтобы Вы сделали с разработчиком, который поставил бы такой резалт метода

Код: plaintext
1.
2.
3.
public Tuple<int, string, int, DateTime?, string, string, decimal, decimal?> GetData()
{
    ...
}

или такой

Код: plaintext
1.
2.
3.
public Tuple<int, string, int, DateTime?, string, string, decimal, Tuple<string, string, string, string, string, string, decimal, decimal?>> GetData()
{
    ...
}

?

Да, я бы тоже оторвал ему руки.

...Тупле - зло.
...
Рейтинг: 0 / 0
IQueryable и Join
    #37450841
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MIIДобрый вечер!

Подскажите, пожалуйста, есть 2 таблицы предположим "Группа" и "Студенты", какой тип указывать у IQueryable при Join запросе?

Пример:
Код: plaintext
1.
2.
3.
4.
5.
public IQueryable<???> getStudent()
{
    return (from s in students 
            join g in group on s.group_id equals g.id
          select new { s.id, s.name, group = g.name});
} 



Создать класс Student и его возвращать. А вообще правильный ход - не возвращать IQueryable, а создать метод

Код: plaintext
1.
2.
3.
public IEnumerable<Student>(Expression<Func<Student,bool>> predicate)
{
  return ... Where(predicate).Select(new Student(...));
}

а то в вашем варианте вы сначала всю таблицу на клиента вытаскиваете, а потом ее у же на клиенте фильтруете - адинэсовский подход какой-то
...
Рейтинг: 0 / 0
IQueryable и Join
    #37450867
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд, че-то Вы не то говорите... )
Особенно про вытаскивание всей коллекции и наезды на иквериэйбл...
...
Рейтинг: 0 / 0
IQueryable и Join
    #37450924
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВерблюд, че-то Вы не то говорите... )
Особенно про вытаскивание всей коллекции и наезды на иквериэйбл...

Что не то говорю? IQueryable в DAL лучше не выставлять - разработчики могут такого с его помощью накосячить, что база ляжет на ровном месте... лучше всего наружу отдавать конкретные запросы, соответствующие конкретному варианту использования и предоставив пользователям только возможность фильтровать результат с помощью Expressions. Например, можно заранее обезопаситься от "пустых" запросов, которые забирают всю базу целиком, ограничив его до разумных пределов с помощью Take(count):

Код: plaintext
1.
2.
3.
public IEnumerable<Student>GetNoMoreThanHundredStudentsPerQuery(Expression<Func<Student,Group,bool>> predicate)
{
  return ... Where(predicate).Take(100).Select(new Student(...));
}

в результате чего, в случае запуска запроса с "пустым" фильтром, на клиента получим не более ста записей за раз, а не всю базу целиком :)
...
Рейтинг: 0 / 0
IQueryable и Join
    #37451142
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВерблюдЧто не то говорю?
Вот это:
Верблюдв вашем варианте вы сначала всю таблицу на клиента вытаскиваете
не то говорите.
Он еще пока не вытаскивает ничего, а просто делает отложенный запрос.

ВерблюдIQueryable в DAL лучше не выставлять
Ну смотря для каких задач. В целом, согласен.

Верблюд...а не всю базу целиком :)
... таблицу )
...
Рейтинг: 0 / 0
IQueryable и Join
    #37451212
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУЧтобы Вы сделали с разработчиком, который поставил бы такой резалт метода
.....


Смотря где его использовать ), в бизнес логике я бы не использовал, а вот для отображения, как раз самое оно для 3ех полей
...
Рейтинг: 0 / 0
IQueryable и Join
    #37451700
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stimpiдля 3ех полей
А если будет 4 поля, то уже плохо? Давайте определим критерий "максимальности" полей :)

P.S. В бизнес-объектах атрибуты имеют плохую привычку расти количественно в зависимости от задач. Выводы делайте сами.
...
Рейтинг: 0 / 0
IQueryable и Join
    #37451904
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

читаем внимательное что было написано про бизнес-объекты и "прокладку" для вьюх
будет расти, будет рефакториться, это нормальный процесс
...
Рейтинг: 0 / 0
IQueryable и Join
    #37451964
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stimpiбудет расти, будет рефакториться, это нормальный процесс
Если есть возможность заложиться на будущее, почему бы этого не сделать? Самому же проще и надежнее работать с конкретным бизнес-классом, а не с педалями от самоката.
...
Рейтинг: 0 / 0
IQueryable и Join
    #37452201
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУОн еще пока не вытаскивает ничего, а просто делает отложенный запрос.

Ну да, он ничего не вытаскивает и что? Это не гарантирует, что где-то в коде, которому ты скормишь свой IQueryable, у тебя нет кода, который вытащит на клиента всю таблицу ради пары записей. Если ты конечно программу не в одиночку пишешь А потом будете неделю искать причину тормозов...
...
Рейтинг: 0 / 0
IQueryable и Join
    #37452967
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВерблюдМСУОн еще пока не вытаскивает ничего, а просто делает отложенный запрос.
Ну да, он ничего не вытаскивает и что?
Что значит "и что"? Это ответ на Ваш же вопрос:
ВерблюдЧто не то говорю?

ВерблюдЭто не гарантирует, что где-то в коде, которому ты скормишь свой IQueryable, у тебя нет кода, который вытащит на клиента всю таблицу ради пары записей.
Ну знаете ли. Адекватный программист уже завидев в методе тип резалта IQueryable<T>, - должен немного задуматься и напрячь булки. Так что тут не согласен.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / IQueryable и Join
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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