2010-10-01 44 views
1

這是很簡單的:如何從三個不同的表中使用linq to sql獲取值?

我有三個表:
問題:
ID(PK)
身體

QuestionsAndAnswers:
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查詢?如果是這樣,怎麼樣?

謝謝。

回答

3

您可能需要做一個連接(注意,實際上是有,你可以使用一個連接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 
+0

啊..很多有關閱讀( - :謝謝。 – 2010-10-01 22:53:07

+0

我應該使用EntitySet <..>/EntityRef <..>? – 2010-10-01 23:01:42

+0

如果您使用LINQ to SQL設計器,它應該自動將屬性添加到模型類。通常爲其創建的私人字段 - > 1關係的類型爲EntityRef ,但公共屬性的類型爲T(實體)。 - >許多關係通常創建爲EntitySet 。但是,如果你使用設計師,它應該爲你處理所有這些...... – Jeff 2010-10-02 03:04:21