Vous n'avez pas besoin de SqlQuery construire pour faire le tri avant le regroupement :
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
};
Cela fait la même chose, mais cela traduit toute l'instruction en SQL, ce qui présente deux avantages
sendern'est pas chargé paresseusement pour chaque messagesender.emailne plante pas lorsquesenderest null, car dans SQL il n'y a pas de référence d'objet null. L'expression entière (sender.email) renvoie simplement null.