Bạn không cần SqlQuery
xây dựng để thực hiện thứ tự trước khi nhóm:
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
};
Điều này cũng thực hiện tương tự, nhưng nó dịch toàn bộ câu lệnh sang SQL, điều này có hai ưu điểm
-
sender
không được tải chậm cho mỗi tin nhắn -
sender.email
không bị lỗi khisender
là null, bởi vì trong SQL không có tham chiếu đối tượng null. Toàn bộ biểu thức (sender.email
) chỉ trả về null.