Я пытаюсь написать следующий запрос LINQ-Entities:
Получите список вопросов, на которые были даны ответы, отсортированные по последним ответам
Итак, в основном это 1 .. * между вопросом и ответом.
Итак, я сначала попытался написать запрос на SQL, чтобы я его понял, и вот что я придумал:
WITH [Answers] AS
(
SELECT QuestionId,
CreatedOn,
ROW_NUMBER() OVER
(
PARTITION BY QuestionId
ORDER BY CreatedOn DESC
) As [Rank]
FROM dbo.Answers
)
select a.*
from dbo.questions a
inner join answers on a.questionid = answers.questionid
where answers.rank = 1
order by answers.createdon desc
Теперь я понятия не имею, возможно ли это сделать с помощью LINQ.
Конечно, приведенный выше запрос может быть неправильным путем, поэтому не думайте, что это простой перевод T-SQL в LINQ-сущности.
Я просто ищу способ написать запрос LINQ-Entities для вышеуказанного требования.
Есть идеи?
EDIT
Вот что я пробовал до сих пор:
var query = questions
.Where(q => q.Answers.Any())
.OrderByDescending(
q => q.Answers.OrderByDescending(
a => a.CreatedOn).FirstOrDefault());
Просто надеюсь, я думаю. Получена следующая ошибка:
Выражения DbSortClause должны иметь тип, сопоставимый по порядку.
Имя параметра: ключ
EDIT
Я должен также упомянуть, что мне нужно нетерпеливо загрузить Answers
в конечном наборе результатов, например:
return ctx.Questions.Include(q => q.Answers)