Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Извлечение данных по мере надобности / 25 сообщений из 45, страница 1 из 2
06.12.2009, 07:47
    #36350453
Извлечение данных по мере надобности
Здравствуйте !

Подскажите пожалуйста, как можно организовать загрузку данных из базы в DataSet по мере надобности этих данных...
К примеру имеется несколько тысяч записей в таблице... пользователь последовательно переключает записи и редактирует их...
ему же не обязательно иметь сразу все записи в памяти.

К тому же если база удаленная это особенно актуально.

Буду благодарен за ссылки на материалы по данной теме.
...
Рейтинг: 0 / 0
06.12.2009, 10:40
    #36350483
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
1. Фильтр
2. Paging

sample
...
Рейтинг: 0 / 0
06.12.2009, 13:45
    #36350629
Извлечение данных по мере надобности
Paging - это же для Web...

А про фильтр не совсем понятно... если подразумевается фильтрация записей (св-во RowFilter различ. компонентов), то это не вариант, ведь все равно все записи уже будут извлечены из базы
...
Рейтинг: 0 / 0
06.12.2009, 18:24
    #36350838
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Чистяк КонстантинPaging - это же для Web...

datagridview paging

Чистяк Константинесли подразумевается фильтрация записей (св-во RowFilter различ. компонентов), то это не вариант, ведь все равно все записи уже будут извлечены из базы
Фильтровать нужно не локально (RowFilter), а средствами СУБД (SQL запросами, условиями WHERE, динамические фильтры).

P.S. Посмотрите линк, который я Вам дал. Там именно это и сделано.
...
Рейтинг: 0 / 0
07.12.2009, 10:55
    #36351370
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Вот, накидал Вам пример, как это делается.

Images






Сделан простейкий юзер контрол GridPager.cs. Для его работы нужно всего-лишь инициализировать его евентом на делегат: GridPager.Page(LoadPage)

Sample
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
using System.Linq;
using System.Windows.Forms;

namespace GridPaging
{
    public partial class GridPagingForm : Form
    {
        public GridPagingForm()
        {
            InitializeComponent();
            gridPager.LoadPageEvent += new GridPager.Page(LoadPage);
            LoadPage();
        }

        private void LoadPage()
        {
            Cursor = Cursors.WaitCursor;

            try
            {

                using (ClassesDataContext context = new ClassesDataContext())
                {
                    var query = string.IsNullOrEmpty(tbRoleName.Text) ?
                        context.aspnet_Roles :
                        context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

                    int totalRecords = query.Count();

                    var result = query.OrderBy(d => d.RoleName)
                        .Skip(gridPager.PageIndex * gridPager.PageSize)
                        .Take(gridPager.PageSize);
                    
                    grid.DataSource = result;                   
                    gridPager.Render(totalRecords, result.Count());                    
                }
            }

            finally
            {
                Cursor = Cursors.Default;
            }
        }

        private void btnFilterSet_Click(object sender, System.EventArgs e)
        {
            LoadPage();
        }

        private void btnFilterClear_Click(object sender, System.EventArgs e)
        {
            tbRoleName.Text = string.Empty;
            LoadPage();
        }

    }    
}


Фильтрация данных идет средствами SQL сервера, а не локальными средствами источника данных (именно так и нужно работать и отрывать руки разработчикам за локальные фильтры).
Paging - это еще более удобное средство навигации по "страницам" грида + оптимальность (не грузим сервер лишними наборами данных).

Не представляю, как, вообще, разработчики могут писать программы под БД без динамических серверных фильтров и пейджинга

Сорцы: скачать
...
Рейтинг: 0 / 0
07.12.2009, 16:33
    #36352389
Извлечение данных по мере надобности
МСУ, огромное спасибо за ответы и терпимость к моему непониманию данного аспекта !
Отедльное спасибо за код - на конкретном примере всегда лучше понимается :)

Надеюсь больше вопросов не возникнет :)
...
Рейтинг: 0 / 0
07.12.2009, 17:07
    #36352488
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Чистяк КонстантинНадеюсь больше вопросов не возникнет :)
Если возникнет вопрос по выборке данных из БД на основе пейджинг-запроса, то

В Linq 2 SQL / EF это делается так:

Код: plaintext
1.
2.
var result = query.OrderBy(d => d.RoleName)
    .Skip(gridPager.PageIndex * gridPager.PageSize)
    .Take(gridPager.PageSize);


В NHibernate это делается так:

Код: plaintext
1.
2.
3.
ICriteria criteria = session.CreateCriteria<Entity>();      
criteria.SetFirstResult(pageIndex * pageSize);
criteria.SetMaxResults(pageSize);
var books = criteria.List<Entity>();


На Transact SQL (2005 сиквел) это делается так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT *
FROM   (
           SELECT ROW_NumBER() OVER(ORDER BY NAME) AS Num,
                  id,
                  NAME
           FROM   sysobjects
       ) t
WHERE  Num BETWEEN  10  AND  20 
ORDER BY
       Num

P.S. Под каждую ORM или чистый SQL - решение может выглядеть по-разному. Главное одно - выбирайте данные с условием Where + Paging - серверными манипуляциями, а не клиентскими. Эта манупуляция заложена в методе LoadPage().
...
Рейтинг: 0 / 0
07.12.2009, 17:29
    #36352557
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Чутка допилил контрол, сделал его поюзабельнее :)

...
Рейтинг: 0 / 0
07.12.2009, 18:10
    #36352646
семки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
МСУЧутка допилил контрол, сделал его поюзабельнее :)


а зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого
...
Рейтинг: 0 / 0
07.12.2009, 21:58
    #36352935
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семкиМСУЧутка допилил контрол, сделал его поюзабельнее :)


а зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого

1. Это не в контроле, это отдельное окно, мониторящее происходящее. Его, конечно, нужно убрать потом.
2. Запрос на Count(*) нужен для формирования пейджинга . Это классика. RTFM.
...
Рейтинг: 0 / 0
08.12.2009, 00:07
    #36353067
семки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
МСУ
2. Запрос на Count(*) нужен для формирования пейджинга . Это классика. RTFM.
деточка, какой пейджинг, если твой второй запрос вернет число <=50, т.е. количество элементов, возвращенное в первом запросе? тебя видно бес попутал, что считать-то надо.. RTFM
...
Рейтинг: 0 / 0
08.12.2009, 11:18
    #36353538
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семкиМСУ
2. Запрос на Count(*) нужен для формирования пейджинга . Это классика. RTFM.
деточка, какой пейджинг, если твой второй запрос вернет число <=50, т.е. количество элементов, возвращенное в первом запросе? тебя видно бес попутал, что считать-то надо.. RTFM
Сынок, Вы видимо перепили с бодуна - первый запрос возвращает PageSize=50 строк, и как изволите узнать, на сколько страниц мне рисовать paging?
Ведь если без пейджинга - то запрос должен вернуть 70 строк. RTFM
...
Рейтинг: 0 / 0
08.12.2009, 11:26
    #36353566
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семки
Берем башку и включаем мозг:

// Запрос на Count(*)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var query = string.IsNullOrEmpty(tbRoleName.Text) ?
    context.aspnet_Roles :
    context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

// Кол-во записей БЕЗ ПЕЙДЖИНГА
int totalRecords = query.Count();

// Записи С ПЕЙДЖИНГОМ
var result = query.OrderBy(d => d.RoleName)
    .Skip(gridPager.PageIndex * gridPager.PageSize)
    .Take(gridPager.PageSize);

Если не сделать Запрос на Count(*), как я узнаю, на сколько страниц мне делать пейджер?
Ну, допетрил?
...
Рейтинг: 0 / 0
08.12.2009, 11:49
    #36353643
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
В плане оптимизации, можно, конечно, не делать лишний запрос на Count(*), если первый запрос возвращает Count < PageSize , а не PageSize=50 , как сказали Вы, сынок.
Но это только для тех случаев, когда сама выборка меньше PageSize.

Код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
private void LoadPage()
{
    Cursor = Cursors.WaitCursor;

    try
    {
        using (ClassesDataContext context = new ClassesDataContext())
        {
            //Get SQL                    
            sql.Text = string.Empty;
            context.Log = new ActionTextWriter(s => sql.Text += s);

            // Готовим запрос на Count(*), но не выполняем
            var query = string.IsNullOrEmpty(tbRoleName.Text) ?
                context.aspnet_Roles :
                context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

            // Готовим запрос и выполняем
            var result = query.OrderBy(d => d.RoleName)
                .Skip(gridPager.PageIndex * gridPager.PageSize)
                .Take(gridPager.PageSize).ToList();

            // Если кол-во записей < PageSize, то не выполняем запрос на Count(*)
            int totalRecords = result.Count < gridPager.PageSize ? result.Count : query.Count();

            grid.DataSource = totalRecords > 0 ? result : null; 
            gridPager.Render(totalRecords, totalRecords > 0 ? result.Count() : 0);
        }
    }

    finally
    {
        Cursor = Cursors.Default;
    }
}


Images




Но, как понимать вот этот пук не в тему?

семячкиа зачем в контроле в списке скуль запросов справа нужен второй запрос?
достаточно первого

Ась?
...
Рейтинг: 0 / 0
08.12.2009, 11:52
    #36353653
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
...
Рейтинг: 0 / 0
08.12.2009, 12:59
    #36353906
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
МСУВ плане оптимизации, можно, конечно, не делать лишний запрос на Count(*), если первый запрос возвращает Count < PageSize , а не PageSize=50 , как сказали Вы, сынок.
Но это только для тех случаев, когда сама выборка меньше PageSize.
Нет, даже это не будет работать, тока щас дотумкал. А вот почему:
если мы включили последнюю страницу, то она вправе вернуть меньшее кол-во строк, чем сам PageSize. Поэтому, нужны дополнительные танцы с бубном.
Поэтому, нужно (так пейджинги и работают) рабоать всегда с:

1. Count(*)
2. Select ... WHERE <Paging> AND <FILEDS>

P.S. Даже сам LinqDataSource + GridView + Paging так работает, профайлером снимал запросы


Семячки , Вы куда пропали, сынок? RTFM зачитались?
...
Рейтинг: 0 / 0
08.12.2009, 13:43
    #36354074
семки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
МСУсемки
Берем башку и включаем мозг:

// Запрос на Count(*)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var query = string.IsNullOrEmpty(tbRoleName.Text) ?
    context.aspnet_Roles :
    context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

// Кол-во записей БЕЗ ПЕЙДЖИНГА
int totalRecords = query.Count();

// Записи С ПЕЙДЖИНГОМ
var result = query.OrderBy(d => d.RoleName)
    .Skip(gridPager.PageIndex * gridPager.PageSize)
    .Take(gridPager.PageSize);

Если не сделать Запрос на Count(*), как я узнаю, на сколько страниц мне делать пейджер?
Ну, допетрил?
да мне как-то пофиг на этот код, выше на скриншоте у тебя два запроса. Накрути свою извилинку на палец и начни вкуривать:

первый запрос:
1) select TOP 50 ... from Roles - тут все отлично, получаем первые 50 ролей.
2) select COUNT (*) from ( select TOP 50 ... from Roles )
а тут уже придется поднапрячься и подумать, что это вообще за высер и откуда он взялся? Разберем по частям. Первая часть - это подзапрос, он возвращает как и первый запрос первые 50 записей и сохраняет их во временное хранилище.
Вторая часть - это подсчет числа элементов COUNT(*), вот только считает он количество элементов, возвращенное подзапросом. Все ещё накручиваешь на палец? А первый подзапрос у тебя вернет либо 50, либо меньше. Так какой тут пейджинг, а?

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

МСУ
Семячки , Вы куда пропали, сынок? RTFM зачитались?
не льсти себе, рановато мне ещё к тебе прислушиваться. В отличие от тебя, кододрочера, я спал сном младенца и не думал о сишарпе.
...
Рейтинг: 0 / 0
08.12.2009, 14:00
    #36354155
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семкида мне как-то пофиг на этот код, выше на скриншоте у тебя два запроса. Накрути свою извилинку на палец и начни вкуривать:

первый запрос:
1) select TOP 50 ... from Roles - тут все отлично, получаем первые 50 ролей.
2) select COUNT (*) from ( select TOP 50 ... from Roles )
Да мне как-то пофиг на Ваши детские потуги, напряги пупок и вдумайся:

1. Сначала выполняется COUNT(*)
2. Потом выполняется TOP 50 / ROW_NUMBER

Разницу улавливаем, сынок? Нет? Тогда продолжаем:

Вот это:

Код: plaintext
1.
2.
var query = string.IsNullOrEmpty(tbRoleName.Text) ?
    context.aspnet_Roles :
    context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

не выполнение запроса.

Вот это:

Код: plaintext
int totalRecords = query.Count();

выполнение запроса.

Сначала: count(*), потом пейджинг-запроса. Ясно, милок?
Жмурим щечки и идем читать букварь про linq lazy load и что такое отложенный запрос и с чем его кушают

семкиа тут уже придется поднапрячься и подумать, что это вообще за высер и откуда он взялся?
Чтобы понять, откуда что взялось, нужно обладать хотя-бы минимумом серого вещества и уметь читать код. Итак, проверим, есть ли у Вас серость и умеете ли Вы читать код?

Вот код: http://sql.ru/forum/actualpost.aspx?bid=12&tid=717843&mid=8034559&p=1&act=quot#8026941

Что так когда должно выполняться, Count(*) перед общим селектом или общий селект перед каутном?

Ась?

семкиРазберем по частям.
Ага, поехали

семкиПервая часть - это подзапрос, он возвращает как и первый запрос первые 50 записей и сохраняет их во временное хранилище.
Какое к черту временное хранилище, дубина - первый запрос это Count(*)

семкиВторая часть - это подсчет числа элементов COUNT(*), вот только считает он количество элементов, возвращенное подзапросом. Все ещё накручиваешь на палец? А первый подзапрос у тебя вернет либо 50, либо меньше. Так какой тут пейджинг, а?
А вторая часть - это как-раз и подзапрос
Детсад
Все ещё накручиваешь на ухо? Так пейджинг тут причем или не при чем?
Упал со стула, программист-любитель мля

семкиМожет ты в коде все и верно конечно написал, не заметить что пейджинг не работает очень сложно но диагностика у тебя явно выдает какую-то лажу
Да лажа есть. Но не в коде и не в пейджинге, а у тебя в голове. RTFM, милок :)

семкине льсти себе, рановато мне ещё к тебе прислушиваться. В отличие от тебя, кододрочера, я спал сном младенца и не думал о сишарпе.
Дядя профессионал, выкручиваться как будем после позорного ведра помоев, которые я слил Вам на голову? :)
RTFM или семки? Да, Вы выбираете семки
...
Рейтинг: 0 / 0
08.12.2009, 14:05
    #36354175
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семки, я понимаю, Вас сбил с понталыку порядок запросов на скрине



но это не значит, что они в таком порядке выполняются

Вот эту строчку:

Код: plaintext
context.Log = new ActionTextWriter(s => sql.Text += s);

нужно было написать перед всеми запросами, а у меня эта строка затесалась ниже. В результате, Ваш тупоголовый ум выкакал:


семячкиа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого

Особенно обратим внимание на выделенное "достаточно первого". Сын, Вы действительно считаете, что для формирования пейджинга достаточно первого запроса, да? :)
Если да, то отправляйтесь сразу в сад.
...
Рейтинг: 0 / 0
08.12.2009, 14:17
    #36354228
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семки, а хотите последний хук под ребро? :)

Держите:

не имеет даже значения, кто перед каким запросом выполнился, один фих они оба должны выполниться.

Пошевелите полым мозгом и ощутите разницу запросов:

Код: plaintext
1.
2.
3.
SELECT COUNT(*) AS [value]
FROM [dbo].[aspnet_Roles] AS [t0]
WHERE [t0].[RoleName] LIKE @p0
-- @p0: Input NVarChar (Size =  4 ; Prec =  0 ; Scale =  0 ) [ddd%]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT [t1].[ApplicationId], [t1].[RoleId], [t1].[RoleName], [t1].[LoweredRoleName], [t1].[Description], [t1].[code]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[RoleName]) AS [ROW_NUMBER], [t0].[ApplicationId], [t0].[RoleId], [t0].[RoleName], [t0].[LoweredRoleName], [t0].[Description], [t0].[code]
    FROM [dbo].[aspnet_Roles] AS [t0]
    WHERE [t0].[RoleName] LIKE @p0
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p1 +  1  AND @p1 + @p2
ORDER BY [t1].[ROW_NUMBER]
-- @p0: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [ddd%]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- @p2: Input Int (Size =  0 ; Prec =  0 ; Scale =  0 ) [ 10 ]

Так что в диагностике как не было проблем, так и нету. Дошло, нет?

Первый запрос - чисто для пейжера.
Второй запрос - это реальная порция данных с сервера для текущей PageIndex

семячкиа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого
Жду ответа на вопрос - достаточно ли первого? :) Ась?
...
Рейтинг: 0 / 0
08.12.2009, 14:27
    #36354265
семки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Данилка, ну ты смешной, ей богу. Это ж надо был столько букв ВЫСРАТЬ за такой короткий промежуток времени. Я просто сижу и ржу с твоей предсказуемости.

Кстати я посмотрел на твой первый пост с кучей заныканного в спойлер говнокода и понял, откуда у тебя этот бред в логе. Но для начала немного отступим и пожуем вместе твои сопли

МСУ
семкиПервая часть - это подзапрос, он возвращает как и первый запрос первые 50 записей и сохраняет их во временное хранилище.
Какое к черту временное хранилище, дубина - первый запрос это Count(*)

семкиВторая часть - это подсчет числа элементов COUNT(*), вот только считает он количество элементов, возвращенное подзапросом. Все ещё накручиваешь на палец? А первый подзапрос у тебя вернет либо 50, либо меньше. Так какой тут пейджинг, а?
А вторая часть - это как-раз и подзапрос
Детсад

ага, т.е. конструкцию вида
select count(*) from (select top 50 ... from .. ) as t1
скуль сервер у тебя выполняет в порядке 1) count(*), 2) select top 50
ага, ага, привет соседям по палате :)

МСУЖмурим щечки и идем читать букварь про linq lazy load и что такое отложенный запрос и с чем его кушают
ба, да никак ты за год подтянул свои знания, браво

а теперь применим их на практике и вернемся от твоего ВЫСЕРА к сути вопроса:

grid.DataSource = result ;
gridPager.Render(totalRecords, result.Count() );

вот тут, деточка, в твой лог оказывается и падают последовательно
1) select top 50
2) select count(*) from (select top 50)

а кто-то там про отложенные запросы хотел рассказать и как они выполняются, ась?

ну и ещё раз для закрепления вернемся сюда и вспомним, что я там тебе написал
семкиа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого
ну а дальше пошел высер на тему пейджинга, от чего я откровенно недоумевал, причем тут оно вообще
семкидеточка, какой пейджинг, если твой второй запрос вернет число <=50, т.е. количество элементов, возвращенное в первом запросе ? тебя видно бес попутал, что считать-то надо.. RTFM
давно принимаешь галлюциногенные препараты?
...
Рейтинг: 0 / 0
08.12.2009, 14:48
    #36354341
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семкиДанилка, ну ты смешной, ей богу. Это ж надо был столько букв ВЫСРАТЬ за такой короткий промежуток времени. Я просто сижу и ржу с твоей предсказуемости.
Ага, а я сижу и ржу с твоей тупости. А что, успех - я Вас научил работать с пейджерами и, самое главное, рассказал что это такое :)

семкиКстати я посмотрел на твой первый пост с кучей заныканного в спойлер говнокода и понял, откуда у тебя этот бред в логе. Но для начала немного отступим и пожуем вместе твои сопли
Ты ж моя прелесть. Ну ок.

семенаага, т.е. конструкцию вида
select count(*) from (select top 50 ... from .. ) as t1
скуль сервер у тебя выполняет в порядке 1) count(*), 2) select top 50
ага, ага, привет соседям по палате :)
Ооо, да мы реально и код чЕтать не умеем? Врача!

А ну-ка по букавкам => какие запросы и в каком порядке выполнятся на сиквеле

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var query = string.IsNullOrEmpty(tbRoleName.Text) ?
    context.aspnet_Roles :
    context.aspnet_Roles.Where(d => d.RoleName.StartsWith(tbRoleName.Text));

int totalRecords = query.Count();

var result = query.OrderBy(d => d.RoleName)
    .Skip(gridPager.PageIndex * gridPager.PageSize)
    .Take(gridPager.PageSize);

?

Ась? Только отвечайте быстро, не мешкайтесь. Разрешаю читать RTFM.

семенавот тут, деточка, в твой лог оказывается и падают последовательно
1) select top 50
2) select count(*) from (select top 50)
Ты реально под дурку косишь?

Это - правильный запрос, чЕтатель ты наш

Сам запрос - это select top 50
А кол-во записей под пеёджер - это select count(*) from (select top 50) + WHERE

TOP - Это для PAGE=1
В остальных случаях идет ROW_NUMBER

Еще раз осознеам серым веществом этот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT COUNT(*) AS [value]
FROM [dbo].[aspnet_Roles] AS [t0]
WHERE [t0].[RoleName] LIKE @p0
-- @p0: Input NVarChar (Size = 2; Prec = 0; Scale = 0) [d%]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

SELECT [t1].[ApplicationId], [t1].[RoleId], [t1].[RoleName], [t1].[LoweredRoleName], [t1].[Description], [t1].[code]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[RoleName]) AS [ROW_NUMBER], [t0].[ApplicationId], [t0].[RoleId], [t0].[RoleName], [t0].[LoweredRoleName], [t0].[Description], [t0].[code]
    FROM [dbo].[aspnet_Roles] AS [t0]
    WHERE [t0].[RoleName] LIKE @p0
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p1 + 1 AND @p1 + @p2
ORDER BY [t1].[ROW_NUMBER]
-- @p0: Input NVarChar (Size = 2; Prec = 0; Scale = 0) [d%]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- @p2: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

Ась?

А кто нам резалтсет генерит? Прааавильно:

Код: plaintext
1.
2.
var result = query.OrderBy(d => d.RoleName)
    .Skip(gridPager.PageIndex * gridPager.PageSize)
    .Take(gridPager.PageSize);

можете мне промямлить, как этот запрос отрабатывает в случае PageIndex=0 и в случае PageIndex>0? Ась?

Пипец, давно с таким ламером не общался )))

Ну точно, - семки , не более того ;)


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

Э, паря? А где ответ на вопрос? :) Я и так знаю, что Вы выпукали "эти" буквы, но ценности в них нет никакой. И это никак не коррелирует с этим:

семкидеточка, какой пейджинг, если твой второй запрос вернет число <=50, т.е. количество элементов, возвращенное в первом запросе? тебя видно бес попутал, что считать-то надо.. RTFM

Почему? Отвечаю:

1. Запрос Count(*) может вернуть число <=50. И что дальше?
2. Во-вторых, вот в этом высере полоумного:

семкиа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого

нигде не говорится о каких-либо условиях. Условия сами что-ли на ходу выдумали?

И так, повторяю вопрос: Вы действительно считаете, что для формирования пейджинга достаточно первого запроса, да? :)
...
Рейтинг: 0 / 0
08.12.2009, 14:54
    #36354375
семки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
МСУ
семенавот тут, деточка, в твой лог оказывается и падают последовательно
1) select top 50
2) select count(*) from (select top 50)
Ты реально под дурку косишь?

Это - правильный запрос, чЕтатель ты наш

Сам запрос - это select top 50
А кол-во записей под пеёджер - это select count(*) from (select top 50) + WHERE

TOP - Это для PAGE=1
В остальных случаях идет ROW_NUMBER

ох майн гад, это п....ц реально, "смотрю в книгу, вижу слово из трех букв, мужской половой орган называется" - это про тебя и твой скриншот

МСУ
Еще раз осознеам серым веществом этот код:

да причем тут этот твой код ты перевозбужден, тебе моча в мозги ударила
МСУ
И так, повторяю вопрос: Вы действительно считаете, что для формирования пейджинга достаточно первого запроса, да? :)
да причем тут, тваю мать, пейджинг? ты дебил?


// мысли в слух
не ну а что, зато Данилка от возбуждения облизал свои десять строчек ещё пятьдесят раз за пол часа и узнал, что порядок запросов оказывается не важен, во всем свои маленькие плюсы жаль только в то что ему говорят вникнуть не смог, мда...
...
Рейтинг: 0 / 0
08.12.2009, 15:03
    #36354415
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
семкиох майн гад, это п....ц реально, "смотрю в книгу, вижу слово из трех букв, мужской половой орган называется" - это про тебя и твой скриншот
Это и всё, что можете сказать по делу, сынуля? Не, ну зачем так сливать сразу Побарахтайтесь еще чутка, ок?

семкида причем тут этот твой код ты перевозбужден, тебе моча в мозги ударила
Да ладно Вам, я веселюсь
Ну так что там у нас по делу? Или увиливаете от прямых вопросов, семянко? )

семкида причем тут, тваю мать, пейджинг? ты дебил?
Да, сливаете по-чёрному
http://sql.ru/forum/actualpost.aspx?bid=12&tid=717843&mid=8035386&p=1&act=quot#8025650

семкине ну а что, зато Данилка от возбуждения облизал свои десять строчек ещё пятьдесят раз за пол часа и узнал, что порядок запросов оказывается не важен, во всем свои маленькие плюсы жаль только в то что ему говорят вникнуть не смог, мда...
За то, что семки узнали сегодня:
1. Что такое пейджинг
2. Зачем он нужен
3. Вот этот выперд:
семкиа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого
реально левый и не в кассу
4. о отложенной (lazy) загрузке данных
5. о порядке выполнения запросов

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

P.S. Упал со стула
Ламерам зеленый свет! Да, Семки? :)
...
Рейтинг: 0 / 0
08.12.2009, 15:06
    #36354429
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных по мере надобности
Самое шизофреничное от семячек, что меня реально порадовало, это

семянаа зачем в контроле в списке скуль запросов справа нужен второй запрос? достаточно первого

и

семянада причем тут, тваю мать, пейджинг? ты дебил?

То есть, чувак пыжится разбираться в пейджинговом запросе, смотрит и анализирует пейджинговые выборки, читает клиентский пейджинговый код, а потом недоумевая выливает:

семянада причем тут, тваю мать, пейджинг?



Нет, семки, пейджинг тут абсолютно не при чем. Он тут так, случайно затесался
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Извлечение данных по мере надобности / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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