Использование объектов Framework, когда включить связанную таблицу, затем Orderby - PullRequest
1 голос
/ 25 января 2011

У меня есть запрос, сделанный в объектах FrameWork, который использует переданный int id, который возвращает правильный вопрос из 1 таблицы, а также возвращает соответствующие ответы из другой таблицы, используя Include.

То, что я хочу, это то, что включенные ответы упорядочены по idЯ искал, но не нашел ответ, который работает.Код ниже - мой оригинальный запрос, который работает со вставленным Orderby.Orderby ничего не добивается.

Как получить ответы в том порядке, в котором они находятся в базе данных, идентификаторы?

public Question GetQuestionById(int id)
{
    Question questions;

    using (var context = new Entities())
    {
        questions = context.Questions.Include("Answers").OrderBy(answer => answer.Id).First(question => question.Id == id);
        return questions;
    }
}

1 Ответ

5 голосов
/ 02 мая 2011

Вы не можете (насколько мне известно)

questions = context.Questions.Include("Answers")
                   .OrderBy(answer => answer.Id)
                   .First(question => question.Id == id);

Параметр, который вы передаете здесь OrderBy (answer => answer.Id), вводит в заблуждение: вы упорядочиваете вопросы, а не ответы.Чтобы уточнить, вы могли бы написать это так:

ObjectSet<Question> questions = context.Questions; 
IQueryable<Question> questionsWithAnswers = questions.Include("Answers");
IQueryable<Question> orderedQuestions = questionsWithAnswers
                                           .OrderBy(question => question.Id);
Question question = orderedQuestions.First(question => question.Id == id);

Чтобы сделать то, что вы хотите, я считаю, что вы можете заказать только после того, как вы запросите их из базы данных:

var question = context.Questions.Include("Answers").First(q => q.Id == id);

var answers = question.Answers.OrderBy(answer => answer.Id);

Другой возможностью может быть использование промежуточного анонимного типа:

var question = from q in context.Questions
               where q.Id == id
               select new {
                   Question = q, 
                   Answers = q.Answers.OrderBy(answer => answer.Id)
               } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...