Nie potrzebujesz SqlQuery
konstrukt do wykonania porządkowania przed grupowaniem:
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
};
Robi to samo, ale tłumaczy całą instrukcję na SQL, co ma dwie zalety
sender
nie ładuje się leniwie dla każdej wiadomościsender.email
nie ulega awarii, gdysender
ma wartość null, ponieważ w SQL nie ma odniesienia do obiektu o wartości null. Całe wyrażenie (sender.email
) po prostu zwraca wartość null.