【问题标题】:LINQ Join in VB.NETLINQ加入VB.NET
【发布时间】:2013-06-27 01:26:23
【问题描述】:

我在很多地方都看过,在 C# 中也看到过几个地方,但在 VB.NET 中什么也没有。所以这里是设置。我有 3 张桌子。它们的格式类似于

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

我知道 For Each 应该类似于 Join,但我似乎无法完全理解这个概念。如果我看到它,我想我会的。

【问题讨论】:

    标签: vb.net linq join


    【解决方案1】:

    根据您尝试做的最简单的方法可能会使用 include

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

    【讨论】:

    • 这将导致所有的问题和答案,但 Miguel 通过 Inner Join 询问细节,这无论如何都没有必要。
    • 我认为他特别要求使用联接而不是 where 条件,并且仅包括基于外键的联接
    • 啊,那么在这种情况下,你是完全正确的。但他没有提到他使用的是 Linq to Entities 还是 EF。 .Include 函数在什么命名空间中,我也确定这是一个 lambda 表达式,可以替换 String 表达式的要求。
    • 我想这就是它的去处。我有一个存储库,我正在尝试根据传递给它的 courseID 值填充视图模型。
    • 每门课程有多个测验,所以它是一个 I
    【解决方案2】:

    事实证明,这个问题已经在另一个帖子中得到了回答。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多