web-dev-qa-db-fra.com

Obtenez les 5 meilleures valeurs avec la requête lambda

Voici mon code,

rptAnnouncement.DataSource = DbContext.Announcements
    .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
    .ToList();  

Je prends les données d'annonces de la base de données avec lambda et je lie ces données au répéteur ASP.NET (rptAnnouncement).

Mais cette requête renvoie toutes les données, je veux juste obtenir les 5 premiers (5 premiers) enregistrements comme select top 5 * from database De MS SQL Server.

19
zey

Vous pouvez utiliser OrderBy() pour ordonner les éléments puis Take() pour prendre les 5 premiers.

rptAnnouncement.DataSource = DbContext.Announcements
    .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
    .OrderBy(n => n.Expire_Date.Value.Date)
    .Take(5);

Notes

  • Vous pouvez ordonner décroissant en utilisant OrderByDescending()
  • Appeler ToList() puis appeler Take() obtiendra tous les éléments, puis prendra le top 5 par opposition à obtenir uniquement le Top 5.
49
Daniel Imms

Si vous ne voulez que le Top 5, vous pouvez utiliser le ci-dessous.

rptAnnouncement.DataSource = DbContext.Announcements.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date).Take(5).ToList();

Plus de détails ici

http://msdn.Microsoft.com/en-us/library/bb503062.aspx

5
ashutosh raina

Utilisez simplement Take(n) dans LINQ

rptAnnouncement.DataSource = DbContext.Announcements
                                      .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
                                      .Take(5).ToList();
2
Praveen Nambiar