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 lasttrace de chaque AccountId (celui avec la date la plus élevée)?

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 tout le dossier:

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

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 à ce superbe endroit LINQ – Exemples LINQ to SQL

Si vous voulez tout l’enregistrement, voici une manière lambda:

 var q = _context .lasttraces .GroupBy(s => s.AccountId) .Select(s => s.OrderByDescending(x => x.Date).FirstOrDefault()); 

Ce 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) }; 

Faites un moyen simple de le faire: –

Création d’une classe pour contenir les informations suivantes

  • Niveau (nombre)
  • URL (URL du site)

Accédez à la liste des sites stockés sur un object ArrayList. Et exécuté requête suivante pour le sortinger dans l’ordre décroissant par niveau.

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

Une fois que la collection a été sortingée dans l’ordre décroissant, j’ai écrit le code suivant pour obtenir l’object qui vient en première ligne

 MyClass topObject = query.FirstRow() 

Cela a fonctionné comme du charme.