2014-09-11 4 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

속성을 배열로 테스트하는 경우 IEnumerableContains 확장 메서드를 사용할 수 있습니다.이 방법은 문자열을 작성하는 것이 더 바람직합니다. 사용해보기 :

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