我有一个动态数组,其中的元素应过滤 linq 查询中的元素(where 子句)。
我使用this questions中提到的System.Linq.Dynamic
库最佳答案。如果我运行:
Dim query = From element In dtImitate.Where("Team = ""Avangers"" Or Team = ""Asgard""")
查询正在运行。但是如果我收集数组元素并将它们放入这样的字符串中:
Public Shared Function CreateDynString(ByRef arr As String()) As String
Dim a As New StringBuilder
a.Append("""")
For Each element In arr
a.Append("Team = ").Append("""""").Append(element).Append("""""").Append(" or ")
Next
Dim b As Integer = a.Length - 4
a.Remove(b, 4)
a.Append("""")
Return a.ToString
End Function
并运行查询:
Dim s As String = DynamicStringBuilder.CreateDynString(teamsArray).ToString
Dim query = From element In dtImitate.Where(s)
什么也没发生。我的 DGV 仍然空着。任何人都可以帮助我让这个查询工作并可以告诉我为什么它不起作用。如果我打印 s
,则为 "Team = ""Avangers""或 Team = ""Asgard"""
。我不知道为什么它不起作用。
最佳答案
如果您要测试数组中的属性,则可以使用 IEnumerable
上的 Contains
扩展方法,这可能比构建字符串更好。试试这个:
Dim query = From element In dtImitate.Where(function (el) teamsArray.Contains(el.Team))
关于vb.net - 使用动态 where 子句进行查询(连接数组元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25786933/