Правильный способ написания запросов Entity Framework - PullRequest
1 голос
/ 17 декабря 2010

Я хочу знать, как правильно написать запрос, подобный этому:

var questions = from q in db.Questions
                join sq in db.SurveyQuestions on q.QuestionID = sq.QuestionID
                where sq.SurveyID == 1
                orderby sq.Order
                select q;

Я в основном хочу выбрать все из таблицы вопросов, где это соответствует значению в другой таблице.

Я думаю, что можно также написать запрос так:

var questions = from q in db.Questions
                from sq in q.SurveyQuestions
                where sq.SurveyID == 1
                orderby sq.Order
                select q;

Этот запрос не работает, но больше похож на то, как я думаю:

var questions = from q in db.Questions
                where q.SurveyQuestions.SurveyID == 1
                orderby q.SurveyQuestions.Order
                select q;

Как правильно написать эти типы запросов в структуре сущностей, используя свойства навигации?

1 Ответ

4 голосов
/ 17 декабря 2010

Не проверял это, но я предполагаю, что это то, что вы ищете

var questions = from sq in db.SurveyQuestions
                where sq.SurveyID == 1
                orderby sq.Order
                select sq.Question;

Где Question - это свойство навигации в SurveyQuestion.

Вы работаете с сущностями, а не с таблицами базы данных. Этот тип запросов - именно то, о чем говорит EF. Вам не нужно думать с точки зрения таблиц базы данных, как в первом запросе. Вместо этого вы можете сразу начать фильтрацию на SurveyQuestions, что более интуитивно понятно. Свойства навигации будут абстрагироваться от тех объединений, которые вы бы использовали, если бы работали непосредственно с базой данных.

...