使用动态where子句查询(连接数组元素)

时间:2014-09-11 12:00:38

标签: vb.net linq dynamic-linq

我有一个动态数组,其中元素应该在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"""。我不知道为什么它不起作用。

1 个答案:

答案 0 :(得分:3)

如果您要测试某个属性是否在数组中,则可以在Contains上使用IEnumerable扩展方法,这可能比构建字符串更可取。试试这个:

Dim query = From element In dtImitate.Where(function (el) teamsArray.Contains(el.Team))