Una delle cose che risultano essere più utili, quando si lavora con le collezioni, sono i metodi di Ricerca, che ci permettono di trovare un elemento della collezione utilizzando come criterio una o più delle sue proprietà. Questi metodi, possono essere creati sia come Indexer, ovvero le property che ci permettono di trovare un elemento passando il valore di una o più proprietà dello stesso, oppure come metodi specifici. Questa seconda opzione, si utilizza perché spesso ci possono essere più property dello stesso tipo che possono essere usate per la ricerca, pertanto non è possibile creare degli indexer per tutte loro. Lavoriamo su un esempio:
La classe Entity, da noi definita che chiameremo AnagraficaAzienda, espone le seguenti proprietà:
string DescrizioneRicerca string RagioneSociale string PartitaIva string Indirizzo string CAP string Citta string PV int IDTipo int IDAnagrafica
Per creare un Indexer per cercare dati usando la Descrizione di Ricerca possiamo usare questo codice:
public AnagraficaAzienda this[string pDescrizioneRocerca] { get { return( Find(item=>item.DescrizioneRicerca==pDescrizioneRicerca); } }
per creare un metodo che ritorna una lista dei dati in cui la ragione sociale soddisfa una regular expression:
public List<AnagraficaAzienda> FindWithRegEx( string pRegEx ) { return (FindAll(items => Regex.Match(items.RagioneSociale, pRegEx).Success)); }
per creare un metodo che ritorna una anagrafica con una determinata partita IVA:
public AnagraficaAzienda FindXPartitaIva(string pPartitaIva) { return( Find(item=>item.PartitaIva==pPartitaIva); }
Per creare un indexer multi dimensionale possiamo usare il seguente codice
public AnagraficaAzienda this[int pIDZona, int pIDAnagrafica] { get { return( Find(item=>item.IDZona==pIDZona && item.IDAnagrafica==pIDAnagrafica); } }
Come possiamo vedere, un predicato ci permette di indicare una qualsiasi espressione binaria quale criterio di ricerca.