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
sender
no se carga de forma diferida para cada mensajesender.email
no falla cuandosender
es nulo, porque en SQL no hay una referencia de objeto nulo. La expresión completa (sender.email
) simplemente devuelve nulo.