2013-06-27 55 views
0

我在很多地方看过,我在C#中看过几处,但在VB.NET中没有。所以这里是设置。我有3张桌子。他们格式化如LINQ加入VB.NET

Quiz 
========= 
ID 
CourseID 
PassingNumber 

Question 
========== 
ID 
QuizID 
QuestionText 

Answer 
========== 
ID 
QuestionID 
AnswerText 
IsCorrect 

我想查询他们把他们放到对象列表中。基本上,我想这样做:

Dim quizzes = From qui In Quiz 
Where qui.CouseID = courseID (This variable is passed from a function) 
Select qui.ID, qui.PassingNumber 
For Each qui.ID 
From que In Question 
Where que.QuizID = qui.ID 
Select que.ID, que.QuestionText 
For Each que.ID 
From ans In Answer 
Where ans.QuestionID = que.ID 
Select ans.AnswerText, ans.IsCorrect 

我知道对于每个人都应该是这样的一个加入,但我似乎无法很好地领会这一概念。如果我为此看到它,我想我会。

回答

0

事实证明,这个问题已经从另一篇文章回答。

LINQ: "Group Join" functionality joining three tables

这就是我想要的,它工作出色:

Dim orderProds = From order In cData.Orders _ 
     Group Join prod In cData.Products _ 
     On order.ProductID Equals prod.ProductID Into OrderProducts = Group 

Dim customerOrderProducts = From cust In cData.Customers _ 
         Group Join ordProd In orderProds _ 
         On cust.CustomerID Equals ordProd.order.CustomerID Into custOrderProds = Group 

适应我的代码:

Dim qAs = From que In _dataContext.Questions _ 
    Group Join ans In _dataContext.Answers _ 
    On ans.quiestionID Equals que.ID Into QuestionAnswers = Group 

Dim qQAs = From qui In _dataContext.Quizs _ (<- Microsoft's pluralization for ya') 
    Group Join qA In qAs _ 
    On qui.ID Equals qA.que.quizID Into QuizQuestionAnswers = Group _ 
    Where qui.courseID = courseID 
0

根据你试图做的最简单的方法是什么很可能会使用包括

Dim q = db.Quiz.Where(q=>q.CouseID = 
courseID).Include("Question").Include("Question.Answer").ToList() 
+0

这将导致所有的问题和答案,但米格尔问通过一个Inner Join来获得具体信息,这并不是必需的。 –

+0

我觉得他明确要求使用加入的不是where条件,而只包含基于外键 –

+0

的加入啊,那么在那种情况下,你是完全正确的。但他没有提及他是否使用Linq to Entities或EF。什么命名空间是'.Include'函数中的,我也确定这是一个lambda表达式,它可以替代String表达式的要求。 –