如何使用linq to sql从三个不同的表中获取值?

时间:2010-10-01 22:32:58

标签: c# linq-to-sql

这很简单:

我有三张桌子:
的问题:
ID(PK)
身体

QuestionsAndAnswers:
QuesionID
答案ID

数目:
ID
车身
是否正确

每个都有一个相应的类:

[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 个答案:

答案 0 :(得分: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};
}

另一种选择是添加关联(导航)属性,以便您可以直接从Questions对象获取所需信息:

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

然后您可以简单地获取问题并执行

myQuestion.QuestionsAndAnswers[0].Answer.IsCorrect