Converti il ​​LINQ C# in dizionario

Converti Il Linq C In Dizionario



In C# LINQ, creazione di un dizionario da System.Collections.Generic.IEnumerable è possibile utilizzando il metodo ToDictionary(). Questo metodo crea un dizionario con dal dato . IL System.ArgumentNullException viene generato se l'origine dati, keySelector o elementSelector è null. Inoltre, se keySelector produce chiavi duplicate per due elementi, the System.ArgumentException viene lanciato. In questa guida, discuteremo come creare un dizionario dall'origine dati elenco sovraccaricando due metodi.

Sintassi:

1. Se si desidera creare un dizionario in base alle funzioni del selettore chiave e del selettore elemento specificate dall'origine dati specificata, eseguire l'overload del seguente metodo:









Parametri:



    1. fonte : Source può essere un IEnumerable (elenco) in cui il dizionario viene creato da questa origine.
    2. keySelector : Questa è una funzione che viene utilizzata per ottenere la chiave da ogni elemento.
    3. elementSelector: Questa è una funzione che viene utilizzata per ottenere l'elemento.
    4. Fonte : questo è il parametro di tipo che specifica il tipo di origine dati.
    5. TChiave: Questo è il parametro di tipo che specifica il tipo di chiave.
    6. TElement : Questo è il parametro di tipo che specifica il tipo di elemento.

2. Se si desidera creare un dizionario in base alla funzione di selezione chiave specificata dall'origine dati specificata, eseguire l'overload del seguente metodo:





Parametri:



    1. fonte : Source può essere un IEnumerable (elenco) in cui il dizionario viene creato da questa origine.
    2. keySelector : Questa è una funzione che viene utilizzata per ottenere la chiave da ogni elemento.
    3. Fonte: Si riferisce al tipo di origine dati.
    4. TKey : Specifica il tipo di chiave.

Esempio 1: selettore chiave specificato e funzione selettore elemento

Crea un elenco con il tipo 'Account' che contiene quattro attributi (Acc_ID, Acc_Name, Industry, Revenue) con cinque record.

1. Creare un dizionario dall'elenco precedente con la chiave come Acc_ID e il valore come Acc_Name.
2. Creare un dizionario dall'elenco precedente con la chiave come Acc_Name e Value come Revenue.

utilizzando Sistema ;
utilizzando System.Linq ;
utilizzando System.Collections.Generic ;

classe Informazioni account
{
pubblico statico vuoto Principale ( )
{
// Crea un elenco di tipo - Account.
Elenco dettagli = nuovo Elenco ( ) ;
// Aggiunge 5 record all'elenco.
dettagli . Aggiungere ( nuovo Account { Acc_ID = 1 , Nome_Acc = 'Linux' , Industria = 'Formazione scolastica' ,Reddito = 2500 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 2 , Nome_Acc = 'Pitone' , Industria = 'Campo di addestramento' ,Reddito = 10000 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 3 , Nome_Acc = 'Giava' , Industria = 'Formazione scolastica' ,Reddito = 500 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 4 , Acc_Nome = '.NETTO' , Industria = 'Formazione' ,Reddito = 2080 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 5 , Nome_Acc = 'Oracolo' , Industria = 'Lavoro' ,Reddito = 2090 } ) ;

// Crea un dizionario dall'elenco precedente con Key come Acc_ID e Value come Acc_Name
Consolle . Linea di scrittura ( ' ----Chiave come Acc_ID e Valore come Acc_Name----' ) ;
Dizionario accounts_dict1 = dettagli . Dizionario ( J => J . Acc_ID , J => J . Acc_Nome ) ;

per ciascuno ( KeyValueCoppia i In account_dict1 )
{
Consolle . Linea di scrittura ( 'Account ID :' + io . Chiave + ' Nome utente :' + io . Valore ) ;
}

// Crea un dizionario dall'elenco precedente con Key come Acc_Name e Value come Revenue
Consolle . Linea di scrittura ( ' ----Key as Acc_Name e Value as Revenue----' ) ;
Dizionario accounts_dict2 = dettagli . Dizionario ( l => l . Acc_Nome , l => l . Reddito ) ;

per ciascuno ( KeyValuePair k In account_dict2 )
{
Consolle . Linea di scrittura ( 'Nome utente :' + K . Chiave + ' Entrate dell'account :' + K . Valore ) ;
}

}
}

// Crea una classe denominata - Account con quattro attributi
pubblico classe Account
{
pubblico int Acc_ID { Ottenere ; impostato ; }
pubblico corda Acc_Nome { Ottenere ; impostato ; }
pubblico corda Industria { Ottenere ; impostato ; }
pubblico int Reddito { Ottenere ; impostato ; }
}

Produzione:

Spiegazione:

1. Crea una classe denominata 'Account' con quattro attributi.

2. Nella classe principale, crea un elenco di tipo 'Account' e inserisci cinque record al suo interno.

3. Creare un dizionario dall'elenco precedente con la chiave come Acc_ID e il valore come Acc_Name. Qui, specifichiamo TKey come int e TElement come stringa. All'interno del metodo ToDictionary(), passiamo l'Acc_ID nel keySelector e l'Acc_Name nell'elementSelector. Infine, usiamo il ciclo 'foreach' per iterare il dizionario e restituire chiavi e valori utilizzando le proprietà key e value.

4. Creare un dizionario dall'elenco precedente con la chiave come Acc_Name e il valore come Revenue. Qui specifichiamo TKey come stringa e TElement come int. All'interno del metodo ToDictionary(), passiamo Acc_Name nel keySelector e il Revenue nell'elementSelector. Infine, usiamo il ciclo 'foreach' per iterare il dizionario e restituire chiavi e valori utilizzando le proprietà key e value.

Esempio 2: Selettore chiave specificato

Usa il codice precedente e crea un dizionario dall'elenco precedente con la chiave come Acc_ID.

utilizzando Sistema ;
utilizzando System.Linq ;
utilizzando System.Collections.Generic ;

classe Informazioni account
{
pubblico statico vuoto Principale ( )
{
// Crea un elenco di tipo - Account.
Elenco dettagli = nuovo Elenco ( ) ;
// Aggiunge 5 record all'elenco.
dettagli . Aggiungere ( nuovo Account { Acc_ID = 1 , Nome_Acc = 'Linux' , Industria = 'Formazione scolastica' ,Reddito = 2500 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 2 , Nome_Acc = 'Pitone' , Industria = 'Campo di addestramento' ,Reddito = 10000 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 3 , Nome_Acc = 'Giava' , Industria = 'Formazione scolastica' ,Reddito = 500 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 4 , Nome_Acc = '.NETTO' , Industria = 'Formazione' ,Reddito = 2080 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 5 , Nome_Acc = 'Oracolo' , Industria = 'Lavoro' ,Reddito = 2090 } ) ;

// Crea un dizionario dall'elenco precedente con la chiave come Acc_ID.
Dizionario accounts_dict = dettagli . Dizionario ( J => J . Acc_ID ) ;
per ciascuno ( KeyValueCoppia i In account_dict )
{
Consolle . Linea di scrittura ( 'Chiave:' + io . Chiave + '-->  Nome account :' + io . Valore . Acc_Nome
+ ' Settore account :' + io . Valore . Industria
+ ' Entrate dell'account :' + io . Valore . Reddito ) ;
}

}
}

// Crea una classe denominata - Account con quattro attributi
pubblico classe Account
{
pubblico int Acc_ID { Ottenere ; impostato ; }
pubblico corda Acc_Nome { Ottenere ; impostato ; }
pubblico corda Industria { Ottenere ; impostato ; }
pubblico int Reddito { Ottenere ; impostato ; }
}

Produzione:

Spiegazione:

Qui, creiamo un dizionario con la chiave come Acc_ID. Questo funge da chiave per ogni record nel dizionario che abbiamo creato dall'elenco. Successivamente, utilizziamo il ciclo 'foreach' per ottenere le chiavi e i valori (con gli attributi) utilizzando le proprietà chiave e valore.

Esempio 3: chiavi duplicate – ArgumentException

Crea un elenco con due record e prova a convertirlo in un dizionario con Acc_ID come chiave.

utilizzando Sistema ;
utilizzando System.Linq ;
utilizzando System.Collections.Generic ;

classe Informazioni account
{
pubblico statico vuoto Principale ( )
{
// Crea un elenco di tipo - Account.
Elenco dettagli = nuovo Elenco ( ) ;
// Aggiunge 2 record all'elenco.
dettagli . Aggiungere ( nuovo Account { Acc_ID = 1 , Nome_Acc = 'Linux' , Industria = 'Formazione scolastica' ,Reddito = 2500 } ) ;
dettagli . Aggiungere ( nuovo Account { Acc_ID = 1 , Nome_Acc = 'Pitone' , Industria = 'Campo di addestramento' ,Reddito = 10000 } ) ;

// Prova a creare un dizionario dall'elenco precedente con la chiave come Acc_ID.
Dizionario accounts_dict = dettagli . Dizionario ( J => J . Acc_ID ) ;

}
}

// Crea una classe denominata - Account con quattro attributi
pubblico classe Account
{
pubblico int Acc_ID { Ottenere ; impostato ; }
pubblico corda Acc_Nome { Ottenere ; impostato ; }
pubblico corda Industria { Ottenere ; impostato ; }
pubblico int Reddito { Ottenere ; impostato ; }
}

Eccezione:

Viene sollevata un'eccezione non gestita che è System.ArgumentException poiché la chiave è duplicata (1) in entrambi gli Acc_ID.

Esempio 4: origine nulla – ArgumentNullException

Crea un elenco con il tipo 'Account' e assegnagli null. Prova a creare un dizionario dall'elenco precedente con la chiave come Acc_ID.

utilizzando Sistema ;
utilizzando System.Linq ;
utilizzando System.Collections.Generic ;

classe Informazioni account
{
pubblico statico vuoto Principale ( )
{
// Crea un elenco di tipo - Account e assegna null ad esso.
Elenco dettagli = nullo ;

// Prova a creare un dizionario dall'elenco precedente con la chiave come Acc_ID.
Dizionario accounts_dict = dettagli . Dizionario ( J => J . Acc_ID ) ;

}
}

// Crea una classe denominata - Account con quattro attributi
pubblico classe Account
{
pubblico int Acc_ID { Ottenere ; impostato ; }
pubblico corda Acc_Nome { Ottenere ; impostato ; }
pubblico corda Industria { Ottenere ; impostato ; }
pubblico int Reddito { Ottenere ; impostato ; }
}

Eccezione:

Viene sollevata un'eccezione non gestita che è System.ArgumentNullException poiché l'elenco è nullo.

Conclusione

Abbiamo imparato come creare un dizionario da IEnumerable (qui è un elenco) utilizzando il metodo ToDictionary() in C# LINQ. Questo metodo può essere sovraccaricato in due modi. Abbiamo discusso entrambi i metodi con esempi. Inoltre, abbiamo appreso i due casi di eccezione generati da questo metodo quando l'origine dati/ keySelector/ elementSelector è null e le chiavi sono duplicate.