代码之家  ›  专栏  ›  技术社区  ›  Oren A

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

  •  1
  • Oren A  · 技术社区  · 14 年前

    我有三张桌子:
    问题:
    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 回复  |  直到 14 年前
        1
  •  3
  •   Jeff    14 年前

    您可能需要执行join(请注意,实际上有一个joinlinq方法可以使用,但我这里不使用它):

    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