РЕДАКТИРОВАТЬ: с новым полем QuestionID, я подозреваю, это будет работать:
var query = from post in posts
where post.ID == id
join related in posts on post.QuestionID equals related.QuestionID
select related;
(Возможно, вы захотите попробовать изменить порядок объединения, чтобы проверить, влияет ли это на план запроса для сгенерированного SQL.)
(В первоначальном вопросе использовалось пустое поле ParentID вместо QuestionID.)
У вас абсолютно есть , чтобы сделать это в одном запросе? Я уверен, что это будет возможно, но, вероятно, это будет уродливее, чем разбить его на части:
var post = posts.Where(p => p.ID == id)
.FirstOrDefault();
if (post == null)
{
// No such question - deal with it
}
int questonID = post.ParentID ?? post.ID;
var allPosts = posts.Where(p => p.ID == questionID || p.ParentID == questionID);
Стоит отметить: если бы вы могли изменить его с «ParentID» на «QuestionID» и сделать его необнуляемым, чтобы у вопроса был собственный ID в качестве QuestionID, запросы стали бы немного проще.
Если вы действительно хотите сделать это в одном запросе, вы можете быть в состоянии сделать это как:
var query = from post in posts
where post.ID == id
let questionID = post.ParentID ?? post.ID
from related in posts
where related.ID == questionID || related.ParentID == questionID
select related;
Я не знаю, что из этого сделает LINQ to SQL.