需要一个LINQ语句 - 多对多的关系

时间:2014-12-09 10:47:37

标签: vb.net linq dataset

我试图在vb.net中编写一个程序,将Web服务中的数据读入数据集。 我有那部分工作,给我一个包含3个表的数据集。

Student包含StudentID,名称等 SubjectClasses包含ClassID,名称,部门等 Collection包含密钥,CollectionID,PersonID

CollectionIDSubjectClasses的外键,PersonIDStudentID

myDataSet.tables("Student")myData.tables("SubjectClasses")myData.tables("Collection")

可访问这些内容

我需要一个查询,它会给我学生名,班级和部门列表

我一直在这里查看各种LINQ语句,并且无法解决如何将它们转换为我的需求。所以任何帮助都会非常感激。

如果这是一个MS数据库的SQL将是......

SELECT Students.StudentID, Students.[prefered name], Classes.[class name]
FROM Students INNER JOIN 
(Classes INNER JOIN CollectionAssociates 
    ON Classes.ClassID = CollectionAssociates.CollectionID) 
    ON Students.StudentID = CollectionAssociates.PersonID;

基于对此的第一个答案,我现在有以下内容,它返回NULL

Dim query = From row1 In myDataset.Tables("CollectionAssociates")
                Join row2 In myDataset.Tables("Student")
                On row1("PersonID") Equals row2("StudentID")
                Join row3 In myDataset.Tables("ClassDescription")
                On row1("CollectionID") Equals row3("ClassID")
                Select {row2("PersonID"), row2("PreferredFirstName"), row2("PreferredLastName"),
                     row2("YearGroup"), row2("TutorGroup"), row3("ClassDescription"), 
                     row3("SubjectDescription")}

好的,经过一些阅读和整理代码后,我现在有了......

Dim students = myDataset.Tables("Students")
Dim collection = myDataset.Tables("CollectionAssociates")
Dim classes = myDataset.Tables("ClassDescription")
Dim query = From student In students
            Join link In collection
            On student.Field(Of Integer)("StudentID") Equals link.Field(Of Integer)("PersonID")
            Join classDetail In classes
            On link.Field(Of Integer)("CollectionID") Equals classDetail.Field(Of Integer)("ClassID")
            Select New With {.name = student.Field(Of String)("PreferredLastName"), .class = classDetail.Field(Of String)("SubjectDescription")}

这会产生运行时错误类型为' System.ArgumentNullException'的未处理异常。发生在System.Data.DataSetExtensions.dll

我可以将这些表视为datagridviews,数据就在那里,并与我期望的相匹配。 希望得到帮助 感谢

1 个答案:

答案 0 :(得分:1)

我想你想要如下

var Result = 
    from row1 in t1
    join row2 in t2 on row1.ID equals row2.ID
    join row3 in t3 on row1.ID equals row3.ID
    select new { ID = row1.ID, Col1 = row2.col1, Col2 = row3.col2 }