I-convert ang C# LINQ sa Dictionary

I Convert Ang C Linq Sa Dictionary



Sa C# LINQ, lumilikha ng diksyunaryo mula sa System.Collections.Generic.IEnumerable ay posible gamit ang ToDictionary() na paraan. Lumilikha ang paraang ito ng diksyunaryo na may mula sa ibinigay na . Ang System.ArgumentNullException ay itinapon kung ang data source, keySelector, o elementSelector ay null. Gayundin, kung ang keySelector ay gumagawa ng mga duplicate na key para sa dalawang elemento, ang System.ArgumentException ay itinapon. Sa gabay na ito, tatalakayin natin kung paano gumawa ng diksyunaryo mula sa listahan ng pinagmumulan ng data sa pamamagitan ng pag-overload ng dalawang pamamaraan.

Syntax:

1. Kung gusto mong gumawa ng diksyunaryo ayon sa tinukoy na key selector at element selector function mula sa ibinigay na data source, i-overload ang sumusunod na paraan:









Mga Parameter:



    1. pinagmulan : Ang pinagmulan ay maaaring isang IEnumerable (listahan) kung saan ang diksyunaryo ay nilikha mula sa pinagmulang ito.
    2. keySelector : Ito ay isang function na ginagamit upang makuha ang susi mula sa bawat elemento.
    3. elementSelector: Ito ay isang function na ginagamit upang makuha ang elemento.
    4. TSsource : Ito ang uri ng parameter na tumutukoy sa uri ng data source.
    5. TKey: Ito ang uri ng parameter na tumutukoy sa uri ng susi.
    6. TElement : Ito ang uri ng parameter na tumutukoy sa uri ng elemento.

2. Kung gusto mong lumikha ng diksyunaryo ayon sa tinukoy na function ng tagapili ng key mula sa ibinigay na pinagmumulan ng data, i-overload ang sumusunod na paraan:





Mga Parameter:



    1. pinagmulan : Ang pinagmulan ay maaaring isang IEnumerable (listahan) kung saan ang diksyunaryo ay nilikha mula sa pinagmulang ito.
    2. keySelector : Ito ay isang function na ginagamit upang makuha ang susi mula sa bawat elemento.
    3. TSsource: Ito ay tumutukoy sa uri ng data source.
    4. TKey : Tinutukoy nito ang uri ng susi.

Halimbawa 1: Tinukoy na Key Selector at Element Selector Function

Gumawa ng listahan na may uri ng 'Account' na mayroong apat na attribute (Acc_ID, Acc_Name, Industry, Revenue) na may limang record.

1. Gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_ID at Value bilang Acc_Name.
2. Gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_Name at Halaga bilang Kita.

gamit Sistema ;
gamit Sistema.Linq ;
gamit System.Collections.Generic ;

klase Impormasyon ng Account
{
pampubliko static walang bisa Pangunahing ( )
{
// Lumikha ng Listahan ng uri - Account.
Listahan ng mga detalye = bago Listahan ( ) ;
// Magdagdag ng 5 record sa Listahan.
mga detalye . Idagdag ( bago Account { Acc_ID = 1 , Acc_Name = 'Linux' , Industriya = 'Edukasyon' , Kita = 2500 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 2 , Acc_Name = 'Python' , Industriya = 'Bootcamp' , Kita = 10000 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 3 , Acc_Name = 'Java' , Industriya = 'Edukasyon' , Kita = 500 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 4 , Acc_Name = '.NET' , Industriya = 'Pagsasanay' , Kita = 2080 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 5 , Acc_Name = 'Oracle' , Industriya = 'trabaho' , Kita = 2090 } ) ;

// Gumawa ng Dictionary mula sa Listahan sa itaas na may Key bilang Acc_ID at Value bilang Acc_Name
Console . WriteLine ( ' ----Susi bilang Acc_ID at Halaga bilang Acc_Name----' ) ;
Mga account sa diksyunaryo_dict1 = mga detalye . SaDiksyonaryo ( j => j . Acc_ID , j => j . Acc_Name ) ;

foreach ( KeyValuePair i sa accounts_dict1 )
{
Console . WriteLine ( 'Account ID :' + i . Susi + ' Pangalan ng Account :' + i . Halaga ) ;
}

// Lumikha ng Diksyunaryo mula sa Listahan sa itaas na may Key bilang Acc_Name at Halaga bilang Kita
Console . WriteLine ( ' ----Susi bilang Acc_Name at Halaga bilang Kita----' ) ;
Mga account sa diksyunaryo_dict2 = mga detalye . SaDiksyonaryo ( l => l . Acc_Name , l => l . Kita ) ;

foreach ( KeyValuePair k sa accounts_dict2 )
{
Console . WriteLine ( 'Pangalan ng Account :' + k . Susi + ' Account-Kita :' + k . Halaga ) ;
}

}
}

// Lumikha ng klase na pinangalanan - Account na may apat na katangian
pampubliko klase Account
{
pampubliko int Acc_ID { makuha ; itakda ; }
pampubliko string Acc_Name { makuha ; itakda ; }
pampubliko string Industriya { makuha ; itakda ; }
pampubliko int Kita { makuha ; itakda ; }
}

Output:

Paliwanag:

1. Gumawa ng klase na pinangalanang 'Account' na may apat na katangian.

2. Sa pangunahing klase, gumawa ng listahan ng uri ng 'Account' at magpasok ng limang talaan dito.

3. Gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_ID at Value bilang Acc_Name. Dito, tinukoy namin ang TKey bilang int at ang TElement bilang string. Sa loob ng ToDictionary() method, ipinapasa namin ang Acc_ID sa keySelector at ang Acc_Name sa elementSelector. Panghuli, ginagamit namin ang 'foreach' na loop upang ulitin ang diksyunaryo at ibalik ang mga key at value gamit ang key at value na mga katangian.

4. Gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_Name at ang halaga bilang Kita. Dito, tinukoy namin ang TKey bilang string at ang TElement bilang int. Sa loob ng ToDictionary() method, ipinapasa namin ang Acc_Name sa keySelector at ang Revenue sa elementSelector. Panghuli, ginagamit namin ang 'foreach' na loop upang ulitin ang diksyunaryo at ibalik ang mga key at value gamit ang key at value na mga katangian.

Halimbawa 2: Tinukoy na Key Selector

Gamitin ang nakaraang code at gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_ID.

gamit Sistema ;
gamit Sistema.Linq ;
gamit System.Collections.Generic ;

klase Impormasyon ng Account
{
pampubliko static walang bisa Pangunahing ( )
{
// Lumikha ng Listahan ng uri - Account.
Listahan ng mga detalye = bago Listahan ( ) ;
// Magdagdag ng 5 record sa Listahan.
mga detalye . Idagdag ( bago Account { Acc_ID = 1 , Acc_Name = 'Linux' , Industriya = 'Edukasyon' , Kita = 2500 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 2 , Acc_Name = 'Python' , Industriya = 'Bootcamp' , Kita = 10000 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 3 , Acc_Name = 'Java' , Industriya = 'Edukasyon' , Kita = 500 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 4 , Acc_Name = '.NET' , Industriya = 'Pagsasanay' , Kita = 2080 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 5 , Acc_Name = 'Oracle' , Industriya = 'trabaho' , Kita = 2090 } ) ;

// Lumikha ng Diksyunaryo mula sa Listahan sa itaas na may Key bilang Acc_ID.
Mga account_dict sa diksyunaryo = mga detalye . SaDiksyonaryo ( j => j . Acc_ID ) ;
foreach ( KeyValuePair i sa accounts_dict )
{
Console . WriteLine ( 'Susi:' + i . Susi + '-->  Account-Pangalan :' + i . Halaga . Acc_Name
+ ' Account-Industry :' + i . Halaga . Industriya
+ ' Account-Kita :' + i . Halaga . Kita ) ;
}

}
}

// Lumikha ng klase na pinangalanan - Account na may apat na katangian
pampubliko klase Account
{
pampubliko int Acc_ID { makuha ; itakda ; }
pampubliko string Acc_Name { makuha ; itakda ; }
pampubliko string Industriya { makuha ; itakda ; }
pampubliko int Kita { makuha ; itakda ; }
}

Output:

Paliwanag:

Dito, gumawa kami ng diksyunaryo na may susi bilang Acc_ID. Ito ang nagsisilbing susi para sa bawat tala sa diksyunaryo na ginawa namin mula sa listahan. Pagkatapos nito, ginagamit namin ang 'foreach' na loop upang makuha ang mga key at value (na may mga attribute) gamit ang key at value na mga katangian.

Halimbawa 3: Mga Duplicate na Susi – ArgumentException

Gumawa ng isang listahan na may dalawang tala at subukang i-convert ito sa isang diksyunaryo na may Acc_ID bilang key.

gamit Sistema ;
gamit Sistema.Linq ;
gamit System.Collections.Generic ;

klase Impormasyon ng Account
{
pampubliko static walang bisa Pangunahing ( )
{
// Lumikha ng Listahan ng uri - Account.
Listahan ng mga detalye = bago Listahan ( ) ;
// Magdagdag ng 2 record sa Listahan.
mga detalye . Idagdag ( bago Account { Acc_ID = 1 , Acc_Name = 'Linux' , Industriya = 'Edukasyon' , Kita = 2500 } ) ;
mga detalye . Idagdag ( bago Account { Acc_ID = 1 , Acc_Name = 'Python' , Industriya = 'Bootcamp' , Kita = 10000 } ) ;

// Subukang lumikha ng Diksyunaryo mula sa Listahan sa itaas na may Key bilang Acc_ID.
Mga account_dict sa diksyunaryo = mga detalye . SaDiksyonaryo ( j => j . Acc_ID ) ;

}
}

// Lumikha ng klase na pinangalanan - Account na may apat na katangian
pampubliko klase Account
{
pampubliko int Acc_ID { makuha ; itakda ; }
pampubliko string Acc_Name { makuha ; itakda ; }
pampubliko string Industriya { makuha ; itakda ; }
pampubliko int Kita { makuha ; itakda ; }
}

Exception:

Ang isang hindi nahawakang exception na System.ArgumentException ay nakataas dahil ang susi ay duplicate (1) sa parehong Acc_ID's.

Halimbawa 4: Null Source – ArgumentNullException

Gumawa ng listahan na may uri ng 'Account' at magtalaga ng null dito. Subukang gumawa ng diksyunaryo mula sa nakaraang listahan na may susi bilang Acc_ID.

gamit Sistema ;
gamit Sistema.Linq ;
gamit System.Collections.Generic ;

klase Impormasyon ng Account
{
pampubliko static walang bisa Pangunahing ( )
{
// Lumikha ng Listahan ng uri - Account at magtalaga ng null dito.
Listahan ng mga detalye = wala ;

// Subukang lumikha ng Diksyunaryo mula sa Listahan sa itaas na may Key bilang Acc_ID.
Mga account_dict sa diksyunaryo = mga detalye . SaDiksyonaryo ( j => j . Acc_ID ) ;

}
}

// Lumikha ng klase na pinangalanan - Account na may apat na katangian
pampubliko klase Account
{
pampubliko int Acc_ID { makuha ; itakda ; }
pampubliko string Acc_Name { makuha ; itakda ; }
pampubliko string Industriya { makuha ; itakda ; }
pampubliko int Kita { makuha ; itakda ; }
}

Exception:

Ang isang unhandled exception na System.ArgumentNullException ay itinaas dahil ang listahan ay null.

Konklusyon

Natutunan namin kung paano lumikha ng isang diksyunaryo mula sa IEnumerable (narito, ito ay listahan) gamit ang ToDictionary() na pamamaraan sa C# LINQ. Ang pamamaraang ito ay maaaring ma-overload sa dalawang paraan. Tinalakay namin ang parehong mga pamamaraan na may mga halimbawa. Gayundin, natutunan namin ang dalawang kaso ng pagbubukod na itinaas ng paraang ito kapag ang data source/keySelector/elementSelector ay null at ang mga susi ay duplicate.