是否可以创建一个MergeTables方法,如下所示,在编译时不知道要连接的字段的字段类型?
Private Function MergeTables(ByVal dtA As DataTable, _
ByVal dtB As DataTable, _
ByVal fieldA As String, _
ByVal fieldB As String, _
ByVal fieldAType As ???, _
ByVal fieldBType As ???)
Dim test = (From a In dtA.AsEnumerable() _
Join b In dtB.AsEnumerable() _
On a.Field(Of ???)(fieldA) _
Equals b.Field(Of ???)(fieldB) _
Select New With _
{ _
'Specify fields here
}).ToList()
Return test
End Function
答案 0 :(得分:2)
如何使您的方法通用并传递Func(Of DataRow, T)
而不是字符串?
Private Function MergeTables(Of T)(ByVal dtA As DataTable, _
ByVal dtB As DataTable, _
ByVal fieldASelector As Func(Of DataRow, T), _
ByVal fieldBSelector As Func(Of DataRow, T))
Dim test = (From a In dtA.AsEnumerable() _
Join b In dtB.AsEnumerable() _
On fieldASelector(a) _
Equals fieldBSelector(b) _
Select New With _
{ _
.t = 1
}).ToList()
Return test
End Function
顺便说一句。从方法返回匿名类型不是一个好习惯。
致电示例
您可以使用lambda表达式来调用该方法:
MergeTables(first, second, Function(r) r.Field(Of String)("testA"), Function(r) r.Field(Of String)("testB"))