No necesita el SqlQuery construir para hacer el orden antes de la agrupación:
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
};
Esto hace lo mismo, pero traduce la instrucción completa a SQL, lo que tiene dos ventajas
senderno se carga de forma diferida para cada mensajesender.emailno falla cuandosenderes nulo, porque en SQL no hay una referencia de objeto nulo. La expresión completa (sender.email) simplemente devuelve nulo.