Как включить значения из двух таблиц в отношение один ко многим - PullRequest
0 голосов
/ 09 ноября 2011

Я бился над этой штукой весь день, и это сводит меня с ума!

Что я пытаюсь сделать:

У меня есть 2 таблицы: Вопросы / Ответы

Таблица вопросов состоит из: QuesID, QuesDescr Таблица ответов состоит из: answerID, QuesID, answer

В основном, таблица ответов - это варианты для каждого вопроса. Например:

QuesID | quesDescr

1 | Какой твой любимый цвет?

answerID | QuesID | ответить

1 | 1 | Красный

2 | 1 | Синий

и т.д ...

На моей странице формы я хочу получить ответы на вопросы и все варианты ответов для конечного пользователя. Кажется, я могу получить список вопросов, но не могу опубликовать и вопросы, и ответы на них в своем View.

Я думал, что обработаю запрос (linq to sql) в моей модели ... но это не дает мне ответов:

public List<nonEEPreQue> getPreQuestions()
        {
            return fDB.nonEEPreQues.OrderBy(q => q.preQuesOrder).ToList();
        }

Я читал кое-что здесь и через эту сеть, которые используют внешние соединения. Я думаю, что это может быть правильно, но я борюсь с тем, как передать переменную. Я попробовал это в модели, но, похоже, он входит в контроллер (?):

var quesList = from ques in preQ.nonEEPreQues
                       join an in preQ.nonEEPreQuesAnswers
                        on ques.preQuesID equals an.preQuesID into outer
                       from an in outer.DefaultIfEmpty()
                       select new
                       {
                           QuestionTxt = ques.preQuesDescr,
                            AnswerTxt = an.answerTxt
                       };


        return View(quesList);

Итак, правильно ли это? Что я тогда делаю для доступа к вопросам и ответам (я предполагаю, что в цикле foreach)?

Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Поскольку вы уже используете Linq to SQL и используете анонимный тип, сохраните его простым и выберите то, что вам нужно, в реляционной манере.

var quesList = from ques in preQ.nonEEPreQues
               select new
               {
                   QuestionID = ques.preQuesID,
                   QuestionTxt = ques.preQuesDescr,
                   Answers = (from  an in preQ.nonEEPreQuesAnswers
                              where an.preQuesID == ques.preQuesID
                              select an)
               };

Это даст вам объект, который имеет QuestionTxt иQuestionID для вопросов и коллекция nonEEPreQuesAnswer объектов, которые прикреплены к вопросу напрямую.Это облегчит их перечисление, и оно также должно быть привязанным (если вы делали gridview или ретранслятор).

0 голосов
/ 09 ноября 2011

В вашем getPreQuestions() вы должны запрашивать ответы и, используя Include(), включать вопросы.

При этом будет получен список ответов со свойством, загруженным с вопросами ..., затем вы передадите этот списокна вид.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...