126 votes

Comment sélectionner uniquement les enregistrements avec la date la plus élevée dans LINQ

J'ai un tableau, "lasttraces", avec les champs suivants.

 Id, AccountId, Version, DownloadNo, Date
 

Les données ressemblent à ceci:

 28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000
28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000
28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000
28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000
28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000
28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000
 

Comment puis-je, dans LINQ to SQL , obtenir uniquement la dernière trace de chaque AccountId (celle avec la date la plus élevée)?

247voto

Mehrdad Afshari Points 204872

Si vous voulez juste la dernière date pour chaque compte, utilisez ceci:

 var q = from n in table
        group n by n.AccountId into g
        select new {AccountId = g.Key, Date = g.Max(t=>t.Date)};
 

Si vous voulez l'enregistrement complet:

 var q = from n in table
        group n by n.AccountId into g
        select g.OrderByDescending(t=>t.Date).FirstOrDefault();
 

57voto

Clark Kent Points 5845

Voici un moyen simple de le faire

 var lastPlayerControlCommand = this.ObjectContext.PlayerControlCommands
                                .Where(c => c.PlayerID == player.ID)
                                .OrderByDescending(t=>t.CreationTime)
                                .FirstOrDefault();
 

Jetez également un coup d'oeil à cet endroit génial LINQ - Exemples LINQ to SQL

6voto

bruno conde Points 28120

Cela pourrait être quelque chose comme:

 var qry = from t in db.Lasttraces
          group t by t.AccountId into g
          orderby t.Date
          select new { g.AccountId, Date = g.Max(e => e.Date) };
 

3voto

Sudhir Kesharwani Points 216

Aller une façon simple de le faire :-

Créé une classe à détenir par suite des informations

  • Niveau (nombre)
  • Url (Url du site)

Aller à la liste des sites enregistrés sur un objet ArrayList. Et exécuté à la suite d'une requête afin de les trier par ordre décroissant de Niveau.

var query = from MyClass object in objCollection 
    orderby object.Level descending 
    select object

Une fois que j'ai eu la collection triée dans l'ordre décroissant, j'ai écrit de code suivant pour obtenir l'Objet qui vient de la rangée du haut

MyClass topObject = query.FirstRow<MyClass>()

Cela a fonctionné comme un charme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X