2009-05-21 18 views
3

Ich bin mit LINQ to SQL meine Daten zu bekommen, wenn ich die Seitengröße auf meinem Datenraster festgelegt und der Benutzer wählt Seite 2, erhalte ich eine Postbacks und Ich las alle Daten um die zweite Seite zu zeigen. Ich vermute, es sollte einen besseren Weg geben, dies zu tun, eine Art, die am Ende nur die Daten liest, die ich zeigen muss. Ich frage mich, ob es irgendwelche Codebeispiele gibt ...Asp.Net Paginierung best practice

Antwort

2

Wenn Sie wirklich die Datenbank Last erleichtern, werfen Sie einen Blick auf client-side paging ...

+0

Das hängt wirklich von den Daten. Google konnte bei einer Suche, die eine Million Seiten zurückgibt, nicht mit dem clientseitigen Paging durchkommen. (Obwohl es so klingt, als würde er den ganzen Satz aus der DB laden) – JerSchneid

+0

Natürlich. Das Entfernen von Lasten aus der Datenbank erhöht die Belastung anderer Projektteile - natürlich; Der Job muss irgendwo erledigt werden. Cliend-Side-Paging erhöht den Netzwerkverkehr _once_ und reduziert die DB-Last um _a lot_ - aber Sie müssen immer daran denken, wie viel_ die Netzwerklast erhöht wird und entscheiden, ob es sich lohnt. –

3

Sie sollten wirklich die Skip und Take Methoden betrachten.

Siehe ScottGu's Beitrag auf LINQ to SQL (Part 3), und suchen Sie die Seite für "Paging unsere Abfrageergebnisse" - das hat einige nette Beispiele.

Wenn Sie alternativ LinqDataSource control verwenden und Sie mit einer SQL 2005- oder 2008-Datenbank sprechen, sollten Sie dieses Verhalten automatisch erhalten. LINQ to SQL (Part 5) deckt das ab.

0
public static IEnumerable<new_log> Search(dbDataContext db, int _user,int _pageNumber, int _rowCountPerPage) 
{ 
var query = (
        from p in db.new_log 
        where p.created_by == (_user < 0 ? p.created_by : _user) orderby p.id descending 
        select p 
       ) 

       .Skip(_pageNumber * _rowCountPerPage).Take(_rowCountPerPage); 
return query; 

} 

Die wichtigsten Punkte:

1.we haben die viewsate in Seite oder Steuerungsebene deaktivieren um die Leistung zu verbessern.

<%@ Page Language="C#" EnableViewState="false" %> OR <asp:GridView 
    EnableViewState="false" runat="server" /> 

2. Versuchen Sie, einzelne Abfrage zu schreiben, um das Ergebnis zu erhalten.

http://forums.asp.net/p/1779601/5120205.aspx/1?p=True&t=634814907594742030