Я думаю, вы могли бы сделать это, используя что-то вроде:
var subQuery = from a in answers
group a by a.QuestionID into grouping
select new
{
QuestionID = grouping.Key,
MaxAnswerID = grouping.Max(x => x.AnswerID)
};
var query = from a in answers
from s in subQuery
where a.AnswerID == s.MaxAnswerID
select a;
Это приводит к CROSS JOIN в сгенерированном SQL
Также вы можете использовать join
во второй части запроса:
var query = from a in answers
join s in subQuery on a.AnswerID equals s.MaxAnswerID
select a;
Это приводит к ВНУТРЕННЕМУ СОЕДИНЕНИЮ в SQL
Примечание для дополнительных случаев - приведенные выше ответы дают разумное предположение о том, что AnswerID
является первичным ключом Answers
- если у вас вместо этого есть план таблицы, в котором используется ключ (AnswerID, QuestionID), тогда вам потребуется присоединиться как по AnswerID, так и QuestionID, например:
var subQuery = from a in answers
group a by a.QuestionID into grouping
select new
{
QuestionID = grouping.Key,
MaxAnswerID = grouping.Max(x => x.AnswerID)
};
var query = from a in answers
from s in subQuery
where a.AnswerID == s.MaxAnswerID
&& a.QuestionID == s.QuestionID
select a;
См. Комментарий к дальнейшему обсуждению этого альтернативного дизайна таблицы ...