DATASET TO LIST<T>USING LINQ

OCELOT 08/04/2014 14:35:32
#437034
Para o VB.Net ficaria mais ou menos assim o uso do PredicateBuilder no seu código
Dim predicate = PredicateBuilder.True(Of Pessoa)()

If Not String.IsNullOrWhiteSpace(ParamFone) Then
predicate = predicate.And(Function(p) p.Telefone.Contains(ParamFone))
End If
If Not String.IsNullOrWhiteSpace(ParamEmail) Then
predicate = predicate.And(Function(p) p.Email.Contains(ParamEmail))
End If

result = ListaPessoas.Where(predicate.Compile())


Lembrando que PredicateBuilder não faz parte do .Net, ela é uma classe bem simples que pode ser adicionada no seu projeto, segue um módulo abaixo da versão traduzida para o VB

Imports System.Linq.Expressions

Public Module PredicateBuilder
Public Function [True](Of T)() As Expression(Of Func(Of T, Boolean))
Return Function(f) True
End Function

Public Function [False](Of T)() As Expression(Of Func(Of T, Boolean))
Return Function(f) False
End Function

<System.Runtime.CompilerServices.Extension()> _
Public Function [Or](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[Or](expr1.Body, invokedExpr), expr1.Parameters)
End Function

<System.Runtime.CompilerServices.Extension()> _
Public Function [And](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[And](expr1.Body, invokedExpr), expr1.Parameters)
End Function
End Module
MAXCIM 08/04/2014 14:55:56
#437035
Ocelote, brigadão eu estava esquecendo da classe.. valeu mesmo

obrigado tbm ao Kerplunk.

problema resolvido.
esse link é fantástico...
Página 2 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas