2014-09-11 60 views
3

我有一個動態數組,其中元素應該過濾linq查詢中的元素(where子句)。動態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"""。我不知道爲什麼它不起作用。

回答

3

如果您要測試屬性在數組中,則可以在IEnumerable上使用Contains擴展方法,這可能比構建字符串更可取。試試這個:

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