Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere l'ultimo record per ciascun gruppo utilizzando Entity Framework e MySQL, inclusa l'entità correlata

Non hai bisogno di SqlQuery build per eseguire l'ordine prima del raggruppamento:

var refGroupQuery = from m in dbContext.Messages
     group m by m.receiver_id into refGroup
     let firstItem = refGroup.OrderByDescending(x => x.created_at)
                             .FirstOrDefault()
     select new MessageDTO { 
                              id = firstItem.id, 
                              content = firstItem.content,
                              sender_email = firstItem.sender.email
                           };

Questo fa lo stesso, ma traduce l'intera istruzione in SQL, che ha due vantaggi

  • sender non è caricato pigro per ogni messaggio
  • sender.email non si arresta in modo anomalo quando sender è null, perché in SQL non è presente alcun riferimento a oggetti null. L'intera espressione (sender.email ) restituisce solo null.