我试图在vb.net中编写一个程序,将Web服务中的数据读入数据集。 我有那部分工作,给我一个包含3个表的数据集。
Student
包含StudentID,名称等
SubjectClasses
包含ClassID,名称,部门等
Collection
包含密钥,CollectionID,PersonID
CollectionID
是SubjectClasses
的外键,PersonID
是StudentID
。
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,数据就在那里,并与我期望的相匹配。 希望得到帮助 感谢
答案 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 }