【发布时间】:2018-07-26 11:09:27
【问题描述】:
是否可以构建动态 linq 查询。我的问题是连接条件可能是一对多。不同场景下要加入的字段数会有所不同。
dim data = (From drow As DataRow In dtDistinctRecords.Rows
Join mainSourceRow As DataRow In mainSource.Rows
On drow.Field(Of String)(var0) Equals mainSourceRow.Field(Of String)(var0)
And drow.Field(Of String)(var1) Equals mainSourceRow.Field(Of String)(var1)
And drow.Field(Of String)(var2) Equals mainSourceRow.Field(Of String)(var2)
And drow.Field(Of String)(var3) Equals mainSourceRow.Field(Of String)(var3)
上述问题的解决方法如下: 这段代码适用于设置选项推断(在项目属性上可用)但不能关闭。我有一个旧版应用程序设置了此选项。 仍然无法将选项推断设置为关闭。
Private Sub SurroundingSub()
Dim columnNames As String() = {"MyColumn1", "MyColumn2"}
Dim dt As DataTable = New DataTable()
dt.Columns.Add("MyColumn", GetType(String))
dt.Columns.Add("MyColumn1", GetType(String))
dt.Columns.Add("MyColumn2", GetType(String))
dt.Columns.Add("Data", GetType(String))
For i As Integer = 0 To 10 - 1
Dim dr As DataRow = dt.NewRow()
dr("MyColumn") = "MyColumn" & i
dr("MyColumn1") = "MyColumn1" & i
dr("MyColumn2") = "MyColumn2" & i
dr("Data") = "Data1" & i
dt.Rows.Add(dr)
Next
Dim dt1 As DataTable = New DataTable()
dt1.Columns.Add("MyColumn", GetType(String))
dt1.Columns.Add("MyColumn1", GetType(String))
dt1.Columns.Add("MyColumn2", GetType(String))
dt1.Columns.Add("Data", GetType(String))
For i As Integer = 0 To 5 - 1
Dim dr As DataRow = dt1.NewRow()
dr("MyColumn") = "MyColumn" & i
dr("MyColumn1") = "MyColumn1" & (i)
dr("MyColumn2") = "MyColumn2" & (i)
dr("Data") = "Data2" & i
dt1.Rows.Add(dr)
Next
dt1.Rows(0)("MyColumn1") = "MyColumn111"
dt1.Rows(1)("MyColumn2") = "MyColumn888"
Dim data = (From dr In dt.AsEnumerable() Join dr1 In dt1.AsEnumerable() On dr("MyColumn") Equals dr1("MyColumn") Select New With {.Dr = dr, .Dr1 = dr1
})
**'It fails here**
For Each column As String In columnNames
Dim columnname = column
data = data.Where(Function(x) x.dr.Field(Of String)(columnname) =
x.dr1.Field(Of String)(columnname))
Next
Dim value = data.[Select](Function(x) x.dr1).CopyToDataTable()
End Sub
【问题讨论】:
标签: .net vb.net linq dynamic-linq