I would like to join two DataTables and create the third one from the result. The result DataTable should have three columns:
- ID
- Name
- YearOfBirth
My Compile options:
- Option explicit: On
- Option strict: On
- Option compare: Binary
Option infer: Off
Dim dr As DataRow REM Dt1 Dim Dt1 As New DataTable Dt1.Columns.Add("ID", GetType(Integer)) Dt1.Columns.Add("Name", GetType(String)) dr = Dt1.NewRow dr("ID") = 1 dr("Name") = "Peter" Dt1.Rows.Add(dr) dr = Dt1.NewRow dr("ID") = 2 dr("Name") = "Anna" Dt1.Rows.Add(dr) dr = Dt1.NewRow dr("ID") = 3 dr("Name") = "John" Dt1.Rows.Add(dr) REM End Dt1 REM Dt2 Dim Dt2 As New DataTable Dt2.Columns.Add("ID", GetType(Integer)) Dt2.Columns.Add("YearOfBirth", GetType(Integer)) dr = Dt2.NewRow dr("ID") = 1 dr("YearOfBirth") = 1970 Dt2.Rows.Add(dr) dr = Dt2.NewRow dr("ID") = 2 dr("YearOfBirth") = 1980 Dt2.Rows.Add(dr) REM End Dt2 Dim Dt3 As New DataTable Dim query As IEnumerable(Of DataRow) = From dr1 In Dt1.AsEnumerable() Group Join dr2 In Dt2.AsEnumerable() On dr1.Field(Of Integer)("ID") Equals dr2.Field(Of Integer)("ID") Into joined = Group From j In joined.DefaultIfEmpty() Select New With { .ID = dr1.Field(Of Integer)("ID"), .Name = dr1.Field(Of String)("Name"), .YearOfBirth = j.Field(Of Integer)("YearOfBirth") } Dt3 = query.CopyToDataTable
But I get the error message in editor (VS 2017):
"Error BC36754: 'IEnumerable(Of anonymous type: ID As Integer, Name As String, YearOfBirth As Integer)' cannot be converted to 'IEnumerable(Of DataRow)' because 'anonymous type: ID As Integer, Name As String, YearOfBirth As Integer' is not derived from 'DataRow', as required for the 'Out' generic parameter 'T' in 'Interface IEnumerable(Of Out T)'."