Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Добрый день. Не пойму почему такой код

       
IEnumerable<Users> list = from u in sso.Users
                                              select u;
                
                    UserListModel udm  = new UserListModel();
                    udm.TotalPages = (int)Math.Ceiling((double)list.Count() / itemperpage);
                    list = list.Skip((page - 1) * itemperpage).Take(itemperpage).ToList();


Не выбирает на сервере ограниченое (itemperpage) кол-во пользователей, профайлером ловлю такой запрос.!!

SELECT 
[Extent1].[UserID] AS [UserID], 
....

FROM [dbo].[Users] AS [Extent1]


Вроде бы должно же. Спасибо.
20 фев 13, 14:28    [13954948]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Потому, что вы уже все выбрали этой строчкой
IEnumerable<Users> list = from u in sso.Users select u;


Поменяйте на
IQueryable<Users> list = from u in sso.Users select u;
20 фев 13, 15:50    [13955619]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
buser,

(double)list.Count() - это заствляет запрос исполнится, не верьте бузеру
20 фев 13, 17:00    [13956237]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
да пофиг...
20 фев 13, 17:09    [13956324]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
pation
buser,

(double)list.Count() - это заствляет запрос исполнится, не верьте бузеру


там
(double)list.Count() / itemperpage


buser
Потому, что вы уже все выбрали этой строчкой
IEnumerable<Users> list = from u in sso.Users select u;


Поменяйте на
IQueryable<Users> list = from u in sso.Users select u;


Спасибо
20 фев 13, 17:33    [13956489]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
P.S.: Andrey1306, но pation таки прав, хоть в вашем случае это роли и не играет.
20 фев 13, 17:38    [13956532]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
buser
P.S.: Andrey1306, но pation таки прав, хоть в вашем случае это роли и не играет.


Вы об этом тут
20 фев 13, 18:01    [13956714]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
P.P.S.: Проклятые комплексы... По поводу моего последнего поста. Да прав, но в одном - первый запрос происходит по Count. А так - IEnumerable всю "малину" портит... и мы получаем серию говнозапросов вместо ожидаемых няшек...
21 фев 13, 11:22    [13959568]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
buser
P.P.S.: Проклятые комплексы... По поводу моего последнего поста. Да прав, но в одном - первый запрос происходит по Count. А так - IEnumerable всю "малину" портит... и мы получаем серию говнозапросов вместо ожидаемых няшек...


Как "няшки" получить ?
21 фев 13, 12:23    [13960045]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
buser
Потому, что вы уже все выбрали этой строчкой
IEnumerable<Users> list = from u in sso.Users select u;



Поменяйте на
IQueryable<Users> list = from u in sso.Users select u;


эти два куска кода, в плане когда выполнится запрос, ничем не отличаются
в довесок добавлю ещё такой:

var list = from u in sso.Users select u;
22 фев 13, 14:09    [13966936]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
pation, эти два куска ни чего не выполняют
22 фев 13, 15:30    [13967582]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
buser
pation, эти два куска ни чего не выполняют

читай лучше
pation
эти два куска кода, в плане когда выполнится запрос, ничем не отличаются
25 фев 13, 13:58    [13976578]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
partion, да... различия появляются только при выполнении Count и Skip + Take... Вы обратили внимание на что сетует топикстартер?
Я вполне доверяю вашему опыту... может вы поясните... почему в одном случае уходит оптимизированный запрос ("по возможности"), а в другом select * from и весь остальной процессинг делается на клиенте? Может это баг ранних версий? :) а довесок, к сожалению вообще "не в красную армию" :)
25 фев 13, 15:08    [13977232]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
а меня можно просветить , что не так то ?
26 фев 13, 01:40    [13980328]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Andrey1306, можете сами поковырять, а можете поискать что почитать IEnumerable vs IQueryable
26 фев 13, 12:20    [13981716]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
buser
Andrey1306, можете сами поковырять, а можете поискать что почитать IEnumerable vs IQueryable


По поводу выполнения на сервере и в памяти я понял свою ошибку, я не понял следующее:

"а довесок, к сожалению вообще "не в красную армию" :)" тут
26 фев 13, 13:34    [13982397]     Ответить | Цитировать Сообщить модератору
 Re: EntityFramework + Постраничная выборка, (ToTake(30)не срабатывает )  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Andrey1306, про довесок - забейте... В контексте данного (вами же примера) он ни чего не доказывал/опровергал/иллюстрировал...
26 фев 13, 14:06    [13982700]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить