Frage wie man Paging auf eine Liste anwendet


Ich habe eine Funktion, die Daten aus der Datenbank abruft und sie der Liste hinzufügt. Meine Liste ist fertig und zeigt die Daten, aber ich möchte auf dieser Liste paging, so dass es begrenzte Datensätze pro Seite zeigt. aber keine Ahnung wie das geht.
Hier ist mein Code dieser Datenschichtfunktion.

 public List<demodto> executereader(List<demodto> Ldemo,SqlCommand cmdshow, string tablename)
    {
         SqlConnection cn;
         try
         {
             cn = this.getconnection();

             cmdshow.Connection = cn;
             cn.Open();

             SqlDataReader rd = cmdshow.ExecuteReader();
             while (rd.Read())
             {
                 demodto dtoobj1 = new demodto();
                 dtoobj1.ID = Convert.ToInt32(rd[0].ToString());
                 dtoobj1.Name = rd[1].ToString();
                 dtoobj1.PhNo = Convert.ToInt32(rd[2].ToString());
                 dtoobj1.Address = rd[3].ToString();
                 dtoobj1.Gender = rd[4].ToString();
                 dtoobj1.Email = rd[5].ToString();
                 dtoobj1.Emptype = rd[6].ToString();

                 Ldemo.Add(dtoobj1);

             }
             cn.Close();
             return Ldemo;
         }
         catch (Exception ex2)
         {
             throw new DataException("error....." + ex2.Message);

         }

    }

Und das ist für DTO Klasse ..

 public class demodto
{
    public Int32 ID{get;set;}
    public string Name{get;set;}
    public Int32 PhNo { get; set; }
    public string Address{get;set;}
    public string Gender { get; set; }
    public string Email { get; set; }
    public string Emptype { get; set; }
 }

Bitte hilf mir. Vielen Dank.


9
2018-01-26 10:10


Ursprung


Antworten:


Sie können eine Liste mit LINQ wie folgt blättern:

IList<demodto> GetPage(IList<demodto> list, int page, int pageSize) {
    return list.Skip(page*pageSize).Take(pageSize).ToList();
}

Angenommen, jede Seite hat 50 Datensätze. Um eine dritte Seite zu erhalten, rufen Sie an

IList<demodto> thirdPage = GetPage(dataList, 3, 50);

Beachten Sie jedoch, dass das Anwenden von Paging auf Daten im Speicher wenig sinnvoll ist: Die Idee hinter Paging besteht darin, die Zeit zu verkürzen, die zum Abrufen Ihrer Daten aus der Datenbank benötigt wird, und etwas Speicher zu sparen, indem nur eine Seite gespeichert wird wird in Ihrem Fall nicht passieren, weil alle Daten auf einmal abgerufen werden.

Um Paging die Mühe wert zu machen, müssen Sie es in die Datenbank verschieben. Ändern Sie Ihre Methode, um Seitengröße und -zahl zu akzeptieren, und verwenden Sie sie, um die SQL zu ändern, um die Liste für eine einzelne Seite abzurufen. Vergessen Sie nicht, die Bestellung auf Ihrer SQL-Seite zu erzwingen, sonst können dieselben Daten auf verschiedenen Seiten erscheinen. Ihr SQL muss geändert werden, um die Paginierung zu unterstützen. Dies geschieht abhängig von Ihrer Datenbank. MS SQL Server Lösung wird beschrieben in dieser Antwort.


19
2018-01-26 10:16



_context.skip(5).take(10)

Versuchen Sie, dieses zu verwenden. Bessere Erklärung in dieser Frage Paging mit LINQ für Objekte


0
2018-01-26 10:14



Skip und Take Extension-Methoden passen zu Ihren Bedürfnissen. Ich weiß nicht, wie Ihre Seitenstruktur ist, aber Sie können eine einfache for-Schleife verwenden, um Werte wie folgt zu erhalten:

int recordPerPage = 20;
for(int i=0; i<pageCount; i++)
{ 
   var values = list.Skip(recordPerPage*i).Take(recordPerPage).ToList();
   // add values to the page or display whatever..
}

0
2018-01-26 10:14