2017-02-11 3 views
1

J'ai DataTable et son filtre par DataView et RowFilter utilisant la chaîne. Cela fonctionne bien. Mais quand Sting créer une énorme ligne, alors l'exception stackoverflow est DataView.Exception levée en utilisant le filtre

dv.RowFilter = strFilter 

Chaîne strFilter est comme ci-dessous. filtrer seulement par la Division deux colonnes et emplacement

strFilter=([Division] LIKE ('Division 2') or [Division] LIKE ('%|Division 2') or [Division] LIKE ('%|Division 1') AND [Location] LIKE ('%Location1') or [Location] LIKE ('Locaion2|%')..... 

Au lieu de RowFilter j'utilisé LINQ, mais ce ne est pas retourné à la bonne table

Dim query = dv.Table.AsEnumerable().Where(Function(m) strFilterOption.Contains(m.Field(Of String)("Division")) AndAlso strFilterOption.Contains(m.Field(Of String)("Location"))) 

dv = query.AsDataView() 
Dim dtFillData As DataTable=dv.ToTable 

Comment puis-je faire cela en utilisant LINQ ou toute autre solution?

Merci à l'avance

+0

Eh bien, commencez à utiliser 'OrElse' au lieu de' AndAlso'. –

Répondre

0

Je pense que vous devriez faire quelque chose comme ce qui suit:

Dim query = dv.Table.AsEnumerable().Where(Function(m) m.Field.ToString()(Of String)("Division").Contains("Division 2") ElseOr m.Field(Of String)("Division").EndsWith("|Division 2") ElseOr m.Field(Of String)("Division").EndsWith("|Division 1") AndAlso .....)) 
+0

Mais c'est une chaîne dynamique. Et c'est multiple [Division] et [Lieu] – Mark