Utilizzare LINQ per estrarre indirizzi email validi ed errati da una lista

di , in LINQ, UserScript,

Capita spesso di dover lavorare con elenchi di contatti contenenti indirizzi email e fra questi ve ne sono di validi, errati o nulli. Come fare per estrapolare rapidamente solo le righe contenenti email errate oppure effettuare un ordinamento per cognome ma che rispetti il raggruppamento :
1. email corrette
2. email errate
3. email vuote

Ci sono diverse soluzioni e tutte piuttosto semplici, ma tramite LINQ e Regex tutto diventa semplicissimo.
La chiave per risolvere il problema è l'utilizzo combinato della giusta regular expression con il metodo Where di LINQ
Ipotizziamo di lavorare con una lista di oggetti Persona con property Nome, Cognome e Email.

Il primo passo è definire il pattern che discrimini fra email corrette e non:

Dim pattern As String = "^[\w\-\.]*[\w\.]\@[\w\.]*[\w\-\.]+[\w\-]+[\w]\.+[\w]+[\w $]"

A questo punto, potendo utilizzare la funzione Match della classe Regex in combinazione con il metodo Where di LINQ possiamo ottenere:

'elenco degli indirizzi email validi
Dim l1 = From p In Contatti _
         Where Regex.Match(p.Email, pattern).Success _
         Order By p.Cognome Select p

'elenco degli indirizzi email errati ma non vuoti
Dim l2 = From p In Contatti _
         Where Regex.Match(p.Email, pattern).Success = False _
         And p.Email.Length > 0 _
         Order By p.Cognome Select p

'elenco degli indirizzi email vuoti
Dim l3 = From p In Contatti _
         Where p.Email.Length = 0 _
         Order By p.Cognome Select p

'concatenamento degli elenco di indirizzi email validi, 
'errati e nulli ordinati al loro interno per cognome
Dim ltot = l1.Concat(l2).Concat(l3)

E' importante comunque sottolineare che il concetto di validità di una email qui considerato è puramente sintattico e dipende dal pattern più o meno restrittivo che si utilizza all'interno della regular expression.

Commenti

Visualizza/aggiungi commenti

Utilizzare LINQ per estrarre indirizzi email validi ed errati da una lista (#83)
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi