Converteer de C# LINQ naar Dictionary

Converteer De C Linq Naar Dictionary



In C# LINQ, een woordenboek maken van System.Collections.Generic.IEnumerable is mogelijk met behulp van de ToDictionary() methode. Deze methode creëert een woordenboek met van de gegeven . De System.ArgumentNullException wordt gegenereerd als de gegevensbron, keySelector of elementSelector null is. Als de keySelector dubbele sleutels produceert voor twee elementen, wordt de Systeem.ArgumentException wordt gegooid. In deze handleiding bespreken we hoe u een woordenboek kunt maken op basis van de lijstgegevensbron door twee methoden te overbelasten.

Syntaxis:

1. Als u een woordenboek wilt maken op basis van de gespecificeerde sleutelkiezer- en elementkiezerfuncties uit de gegeven gegevensbron, voert u de volgende methode uit:









Parameters:



    1. bron : Bron kan een IEnumerable (lijst) zijn waarin het woordenboek is gemaakt op basis van deze bron.
    2. sleutelkiezer : Dit is een functie die wordt gebruikt om de sleutel van elk element te krijgen.
    3. elementSelector: Dit is een functie die wordt gebruikt om het element te krijgen.
    4. TBron : Dit is de parameter type die het type gegevensbron specificeert.
    5. Tsleutel: Dit is de parameter type die het type sleutel specificeert.
    6. TElement : Dit is de parameter type die het type element specificeert.

2. Als u een woordenboek wilt maken volgens de opgegeven toetsselectiefunctie uit de gegeven gegevensbron, overbelast dan de volgende methode:





Parameters:



    1. bron : Bron kan een IEnumerable (lijst) zijn waarin het woordenboek is gemaakt op basis van deze bron.
    2. sleutelkiezer : Dit is een functie die wordt gebruikt om de sleutel van elk element te krijgen.
    3. TBron: Dit verwijst naar het type gegevensbron.
    4. Tsleutel : Geeft het type sleutel aan.

Voorbeeld 1: Gespecificeerde toetskiezer en elementkiezerfunctie

Maak een lijst met het type 'Account' met vier attributen (Acc_ID, Acc_Name, Industry, Revenue) met vijf records.

1. Maak een woordenboek uit de vorige lijst met de sleutel als Acc_ID en Value als Acc_Name.
2. Maak een woordenboek van de vorige lijst met de sleutel als Acc_Name en Value als Revenue.

gebruik makend van Systeem ;
gebruik makend van Systeem.Linq ;
gebruik makend van System.Collections.Generic ;

klas Account Informatie
{
openbaar statisch leegte Voornaamst ( )
{
// Maak een lijst met typen - Account.
Maak een lijst van details = nieuw Lijst ( ) ;
// Voeg 5 records toe aan de lijst.
details . Toevoegen ( nieuw Rekening { Acc_ID = 1 , Acc_Naam = 'Linux' , Industrie = 'Onderwijs' ,Winst = 2500 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 2 , Acc_Naam = 'Python' , Industrie = 'Bootcamp' ,Winst = 10000 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 3 , Acc_Naam = 'Java' , Industrie = 'Onderwijs' ,Winst = 500 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 4 , Acc_Naam = '.NETTO' , Industrie = 'Opleiding' ,Winst = 2080 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 5 , Acc_Naam = 'Orakel' , Industrie = 'Functie' ,Winst = 2090 } ) ;

// Maak een woordenboek uit de bovenstaande lijst met sleutel als Acc_ID en waarde als Acc_Name
Troosten . Schrijf lijn ( ' ---- Sleutel als Acc_ID en waarde als Acc_Name ----' ) ;
Woordenboek accounts_dict1 = details . naarwoordenboek ( J => J . Acc_ID , J => J . Acc_Naam ) ;

voor elk ( KeyValuePair i in rekeningen_dict1 )
{
Troosten . Schrijf lijn ( 'Account ID :' + i . Sleutel + ' Accountnaam :' + i . Waarde ) ;
}

// Maak een woordenboek van de bovenstaande lijst met sleutel als Acc_Name en waarde als omzet
Troosten . Schrijf lijn ( ' ----Sleutel als Acc_Name en Waarde als Opbrengst----' ) ;
Woordenboek accounts_dict2 = details . naarwoordenboek ( ik => ik . Acc_Naam , ik => ik . Winst ) ;

voor elk ( KeyValuePair k in rekeningen_dict2 )
{
Troosten . Schrijf lijn ( 'Accountnaam :' + k . Sleutel + ' Account-inkomsten :' + k . Waarde ) ;
}

}
}

// Maak een klasse met de naam - Account met vier attributen
openbaar klas Rekening
{
openbaar int Acc_ID { krijgen ; set ; }
openbaar snaar Acc_Naam { krijgen ; set ; }
openbaar snaar Industrie { krijgen ; set ; }
openbaar int Winst { krijgen ; set ; }
}

Uitgang:

Uitleg:

1. Maak een klasse met de naam 'Account' met vier attributen.

2. Maak in de hoofdklasse een lijst van het type 'Account' en voeg er vijf records in in.

3. Maak een woordenboek uit de vorige lijst met de sleutel als Acc_ID en Value als Acc_Name. Hier specificeren we de TKey als int en de TElement als string. Binnen de methode ToDictionary() geven we de Acc_ID door in de keySelector en de Acc_Name in de elementSelector. Ten slotte gebruiken we de 'foreach'-lus om het woordenboek te herhalen en de sleutels en waarden te retourneren met behulp van de sleutel- en waarde-eigenschappen.

4. Maak een woordenboek van de vorige lijst met de sleutel als Acc_Name en de waarde als Revenue. Hier specificeren we de TKey als string en het TElement als int. Binnen de methode ToDictionary() geven we de Acc_Name door in de keySelector en de Revenue in de elementSelector. Ten slotte gebruiken we de 'foreach'-lus om het woordenboek te herhalen en de sleutels en waarden te retourneren met behulp van de sleutel- en waarde-eigenschappen.

Voorbeeld 2: Gespecificeerde toetskiezer

Gebruik de vorige code en maak een woordenboek uit de vorige lijst met de sleutel als Acc_ID.

gebruik makend van Systeem ;
gebruik makend van Systeem.Linq ;
gebruik makend van System.Collections.Generic ;

klas Account Informatie
{
openbaar statisch leegte Voornaamst ( )
{
// Maak een lijst met typen - Account.
Maak een lijst van details = nieuw Lijst ( ) ;
// Voeg 5 records toe aan de lijst.
details . Toevoegen ( nieuw Rekening { Acc_ID = 1 , Acc_Naam = 'Linux' , Industrie = 'Onderwijs' ,Winst = 2500 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 2 , Acc_Naam = 'Python' , Industrie = 'Bootcamp' ,Winst = 10000 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 3 , Acc_Naam = 'Java' , Industrie = 'Onderwijs' ,Winst = 500 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 4 , Acc_Naam = '.NETTO' , Industrie = 'Opleiding' ,Winst = 2080 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 5 , Acc_Naam = 'Orakel' , Industrie = 'Functie' ,Winst = 2090 } ) ;

// Maak een woordenboek uit de bovenstaande lijst met sleutel als Acc_ID.
Woordenboek accounts_dict = details . naarwoordenboek ( J => J . Acc_ID ) ;
voor elk ( KeyValuePair i in rekeningen_dict )
{
Troosten . Schrijf lijn ( 'Sleutel:' + i . Sleutel + '-->  Accountnaam :' + i . Waarde . Acc_Naam
+ ' Account-Industrie :' + i . Waarde . Industrie
+ ' Account-inkomsten :' + i . Waarde . Winst ) ;
}

}
}

// Maak een klasse met de naam - Account met vier attributen
openbaar klas Rekening
{
openbaar int Acc_ID { krijgen ; set ; }
openbaar snaar Acc_Naam { krijgen ; set ; }
openbaar snaar Industrie { krijgen ; set ; }
openbaar int Winst { krijgen ; set ; }
}

Uitgang:

Uitleg:

Hier maken we een woordenboek met de sleutel als Acc_ID. Dit fungeert als de sleutel voor elk record in het woordenboek dat we op basis van de lijst hebben gemaakt. Daarna gebruiken we de 'foreach' -lus om de sleutels en waarden (met attributen) te krijgen met behulp van de sleutel- en waarde-eigenschappen.

Voorbeeld 3: dubbele sleutels – ArgumentException

Maak een lijst met twee records en probeer deze om te zetten in een woordenboek met de Acc_ID als sleutel.

gebruik makend van Systeem ;
gebruik makend van Systeem.Linq ;
gebruik makend van System.Collections.Generic ;

klas Account Informatie
{
openbaar statisch leegte Voornaamst ( )
{
// Maak een lijst met typen - Account.
Maak een lijst van details = nieuw Lijst ( ) ;
// Voeg 2 records toe aan de lijst.
details . Toevoegen ( nieuw Rekening { Acc_ID = 1 , Acc_Naam = 'Linux' , Industrie = 'Onderwijs' ,Winst = 2500 } ) ;
details . Toevoegen ( nieuw Rekening { Acc_ID = 1 , Acc_Naam = 'Python' , Industrie = 'Bootcamp' ,Winst = 10000 } ) ;

// Probeer een woordenboek te maken uit de bovenstaande lijst met sleutel als Acc_ID.
Woordenboek accounts_dict = details . naarwoordenboek ( J => J . Acc_ID ) ;

}
}

// Maak een klasse met de naam - Account met vier attributen
openbaar klas Rekening
{
openbaar int Acc_ID { krijgen ; set ; }
openbaar snaar Acc_Naam { krijgen ; set ; }
openbaar snaar Industrie { krijgen ; set ; }
openbaar int Winst { krijgen ; set ; }
}

Uitzondering:

Een onverwerkte uitzondering die System.ArgumentException is, wordt gegenereerd omdat de sleutel duplicaat (1) is in beide Acc_ID's.

Voorbeeld 4: Null-bron – ArgumentNullException

Maak een lijst met het type 'Account' en wijs er null aan toe. Probeer een woordenboek te maken uit de vorige lijst met de sleutel als Acc_ID.

gebruik makend van Systeem ;
gebruik makend van Systeem.Linq ;
gebruik makend van System.Collections.Generic ;

klas Account Informatie
{
openbaar statisch leegte Voornaamst ( )
{
// Maak een lijst van type - Account en wijs er null aan toe.
Maak een lijst van details = nul ;

// Probeer een woordenboek te maken uit de bovenstaande lijst met sleutel als Acc_ID.
Woordenboek accounts_dict = details . naarwoordenboek ( J => J . Acc_ID ) ;

}
}

// Maak een klasse met de naam - Account met vier attributen
openbaar klas Rekening
{
openbaar int Acc_ID { krijgen ; set ; }
openbaar snaar Acc_Naam { krijgen ; set ; }
openbaar snaar Industrie { krijgen ; set ; }
openbaar int Winst { krijgen ; set ; }
}

Uitzondering:

Een onverwerkte uitzondering, System.ArgumentNullException, wordt gegenereerd omdat de lijst null is.

Conclusie

We hebben geleerd hoe we een woordenboek kunnen maken van de IEnumerable (hier is het een lijst) met behulp van de ToDictionary()-methode in C# LINQ. Deze methode kan op twee manieren worden overbelast. We hebben beide methoden met voorbeelden besproken. We hebben ook de twee uitzonderingsgevallen geleerd die door deze methode worden gegenereerd wanneer de gegevensbron/keySelector/elementSelector null is en de sleutels duplicaat zijn.