LinQ max Date dans une requête optimisée

entity-framework linq linq-to-entities

Question

J'ai le code suivant:

Decimal initialBalance;
DateTime dailyDate = ctx.DailyBalances.Max(c => c.DailyDate);
          if (dailyDate != null)
              initialBalance = ctx.DailyBalances.Where(c => c.DailyDate == dailyDate).Select(c => c.FinalBalance).FirstOrDefault();
            else
                initialBalance = 0;

            return initialBalance;

Néanmoins, j'ai essayé de trouver des moyens de l'optimiser, en faisant une requête au lieu d'une ... toute suggestion ??

Réponse acceptée

Utilisez OrderByDescending et prenez le premier enregistrement:

initialBalance = ctx.DailyBalances
   .OrderByDescending(c => c.DailyDate)
   .Select(c => c.FinalBalance)
   .FirstOrDefault();

Ce type de requête est optimisé dans SQL Server afin qu'il ne nécessite pas de tri O (n log (n)) de la table entière. S'il existe un index sur DailyDate il trouvera la dernière ligne de l'index. Sans index, il utilisera un algorithme optimisé appelé Top N Sort qui s'exécute en temps linéaire.

Cependant, cette requête sera O (n log (n)) dans LINQ to Objects.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow