سؤال

قد أكون مخطئًا ، لكن هل طريقة aspagination ليست غير فعالة للغاية لأنها تمتص جميع البيانات من مستودع أولاً لتهيئة الشمولية وما إلى ذلك؟ لذلك لا يتم استخدام الترحيل لجعل الوصول إلى البيانات أكثر كفاءة.

لم أجد أي أمثلة تستخدم مستودعًا وترحيلًا "حقيقيًا" (أي يستخدم الأعلى وما إلى ذلك في SQL Atcual). كيف يمكنني استخدام جهاز النداء إذا كان لدي طريقة مستودع مع هذا التوقيع:

ilist getData (int؟ page ، out int totalitems)

أي ردود الفعل سيكون موضع تقدير كبير. شكرًا.

مسيحي

هل كانت مفيدة؟

المحلول

يمكنك استخدام CustomPagination<T> الفصل الذي يعد جزءًا من MVCContrib مثل هذا:

public ActionResult Index(int page)
{
    int totalItems;
    int pageSize = 10;
    var data = Repository.GetData(page, out totalItems);
    var paginatedData = new CustomPagination<Bla>(
        data, page, pageSize, totalItems
    );
    return View(paginatedData);
}

وداخل وجهة نظرك:

<%= Html.Pager(Model) %>

نصائح أخرى

أعتقد أنك قد تكون موجهة مع افتراضاتك على كفاءة الترحيل؟ حاول إلقاء نظرة على تنفيذ SQL في Profiler - إنه ينفذ بيانين SQL - واحد لاسترداد العدد والآخر لتحديد أفضل 10. أدناه هي نتائج SQL المنفذة من Profiler -

يسترجع SQL هذا العد - يستخدمه النداء:

SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT 
   COUNT(1) AS [A1]
   FROM [dbo].[Customer] AS [Extent1]
)
AS [GroupBy1]

في حين أن ما يلي هو SQL المستخدم لاسترداد البيانات:

SELECT TOP (10) 
[Extent1].[CustomerId] AS [CustomerId], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName],
...
FROM ( SELECT [Extent1].[CustomerId] AS [CustomerId], [Extent1].[FirstName] AS [FirstName], [Extent1].[LastName] AS [LastName], ..., row_number() OVER (ORDER BY [Extent1].[Company] ASC) AS [row_number]
    FROM [dbo].[Customer] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Company] ASC

لاحظ الجزء العلوي (10) ، row_number () ، وأين ...> 20 عبارات في البرنامج النصي SQL الثاني؟ هل هذا يساعد على توضيح؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top