Как вы получаете значения из трех разных таблиц, используя linq to sql? - PullRequest
1 голос
/ 02 октября 2010

Это довольно просто:

У меня есть три стола:
Вопросы:
ID (PK)
Тело

Вопросы и ответы:
QuesionID
AnswerID

Ответы:
ID
Тело
IsCorrect

Каждый имеет соответствующий класс:

[Table]
public class Questions  
{  
  [Column]public int ID;  
  [Column]public string Body;  
}   

[Table]      
public class QuestionsAndAnswers   
{
  [Column]public int QuestionID;
  [Column]public int AnswerID;  
}  

[Table]
public class Answers
{
  [Column]public int AnswerID;  
  [Column]public string Body;
  [Column]public bool IsCorrect;
}  

Мне нужно получить вопрос со всеми ответами.

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

private Table<Questions> questionsTable;  
public SQLQuestionsRepository (string connString)  
{  
  questionsTable=(new DataContext(connString)).GetTable<Questions>();
}  

Но как мне связать конкретный вопрос с его ответами?
Могу ли я сделать это одной командой или я должен на самом делеиспользовать запросы linq?и если да, то как?

Спасибо.

1 Ответ

3 голосов
/ 02 октября 2010

Возможно, вы захотите выполнить объединение (обратите внимание, что на самом деле вы можете использовать метод LINQ объединения, но я здесь не использую):

using (var dataContext = new DataContext(connString)) {
  questionsTable=
             from q in dataContext.GetTable<Questions>()
             from a in dataContext.GetTable<Answers>()
             from qa in dataContext.GetTable<QuestionsAndAnswers>()
             where qa.QuestionID == q.QuestionID && qa.AnswerID == a.AnswerID
             select new { Question = q, Answer = a};
}

Другой вариант - добавить свойства ассоциации (навигации), чтобы вы могли получить необходимую информацию сразу же из объекта «Вопросы»:

[Association(Storage="QuestionsAndAnswers", OtherKey="QuestionID")]
public QuestionsAndAnswers QuestionsAndAnswers ...

Тогда вы можете просто получить Вопросы и сделать

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