我有一个动态数组,其中元素应该在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"" Or Team = ""Asgard"""
。我不知道为什么它不起作用。
答案 0 :(得分:3)
如果您要测试某个属性是否在数组中,则可以在Contains
上使用IEnumerable
扩展方法,这可能比构建字符串更可取。试试这个:
Dim query = From element In dtImitate.Where(function (el) teamsArray.Contains(el.Team))