web-dev-qa-db-fra.com

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

110
Bas Jansen

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();
218
Mehrdad Afshari

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’œil à cet endroit génial de LINQ - exemples LINQ to SQL

47
Developer

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());
19
Bob Zhang

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) };
4
bruno conde

Allez un moyen simple de faire ceci: -

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

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

Aller à la liste des sites stockés sur un objet ArrayList. Et exécuté requête suivante pour le trier dans l'ordre décroissant par niveau.

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

Une fois la collection triée par ordre décroissant, j’ai écrit le code suivant pour obtenir l’objet figurant dans la rangée du haut.

MyClass topObject = query.FirstRow<MyClass>()

Cela a fonctionné comme un charme.

3
Sudhir Kesharwani