Как мне внешнее объединить несколько таблиц, используя linq для сущностей - PullRequest
1 голос
/ 10 февраля 2011

Я использую ASP.NET MVC 3 с Entity Framework CodeFirst

У меня есть два класса следующим образом:

Вопрос:

public class Question
{
    public int ID { get; set; }
    public Target Target { get; set; }
    public string QuestionText { get; set; }
    public Category Category { get; set; }
    public QuestionType QuestionType { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
    public Unit Unit { get; set; }
}

Ответ:

public class Answer
{
    public int ID { get; set; }
    public virtual Question Question { get; set; }
    public string AnswerText { get; set; }
    public int Value { get; set; }
}

У меня также есть эта ViewModel:

public class QuestionViewModel
{
    public int ID { get; set; }
    public string Question { get; set; }
    public string QuestionType { get; set; }
    public string Target { get; set; }
    public string Category { get; set; }
    public string Unit { get; set; }
    public List<Answer> Answers { get; set; }
}

Я хочу запросить таблицу вопросов и включить ответы, если они есть.

Я пыталсяэтот стиль

        var question = (from q in hontgen.Questions
                        where q.ID == id
                        join qt in db.QuestionTypes on q.QuestionType equals qt
                        join t in db.Targets on q.Target equals t
                        join c in db.Categories on q.Category equals c
                        join u in db.Units on q.Unit equals u
                        join a in db.Answers on q.Answers equals a

                        select new QuestionViewModel() {
                            ID = q.ID,
                            Question = q.QuestionText,
                            QuestionType = qt.Type,
                            Category = c.CategoryName,
                            Unit = u.UnitName,
                            Target = t.TargetName,
                            Answers = a
                        }).Single();

Но это, конечно, не катит, потому что это не список ответов, а только один ответ.

Как переписать запрос, чтобы получить все ответы в коллекции или все ответы с правильным вопросом в «Вопросе», в то же время принимая пустой список ответов?

1 Ответ

4 голосов
/ 10 февраля 2011

Как насчет подзапроса, подобного следующему

public class DataRepository
{
    public List<Question> Questions { get; set; }
    public IEnumerable<Answer> Answers { get; set; }

}


public class QandA
{

    DataRepository dr = new DataRepository();

    public void QueryQuestion(int id)
    {
        var question = (from q in dr.Questions
                        where q.ID == id

                        select new QuestionViewModel()
                        {
                            ID = q.ID,
                            Question = q.QuestionText,
                            Answers = (from a in dr.Answers 
                                        where a.Question == q
                                        select a)
                        });
    }

}

}

...