Você não precisa do
SqlQuery
construct para fazer a ordenação antes do agrupamento: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
};
Isso faz o mesmo, mas traduz toda a instrução em SQL, o que tem duas vantagens
sender
não é carregado com preguiça para cada mensagemsender.email
não trava quandosender
é nulo, pois no SQL não há referência de objeto nulo. A expressão inteira (sender.email
) apenas retorna nulo.