2017-05-03 1 views
2

J'ai créé l'objet unique de IEnumerable voulez rendre l'objet de type dictionnaire pour gérer la clé et la valeur.Comment obtenir la valeur de paire de l'objet CultureTypes en C#?

souhaitez extraire le symbole monétaire et le nom des cultures.

IEnumerable<string> currencySymbols = CultureInfo.GetCultures(CultureTypes.SpecificCultures) //Only specific cultures contain region information 
      .Select(x => (new RegionInfo(x.LCID)).ISOCurrencySymbol) 
      .Distinct() 
      .OrderBy(x => x); 
      foreach(string s in currencySymbols) 
      { 
       CurrencyTable tbl = new CurrencyTable(); 
       tbl.Iso = s; 
       tbl.Name = s; 
      } 

Je veux comme ci-dessous

IEnumerable<string,string> 

Comment ça possible? CurrencyTable est une classe qui contient ID | Iso | Name Filed

+0

Une chose comme 'IEnumerable ' n'existe pas en C#. Qu'essayez-vous d'accomplir? Voulez-vous un'Dictionnaire 'pour l'accès par nom? – ChriPf

+0

Je veux obtenir tous les noms iso & monnaie pour stocker dans la base de données .. –

+0

voir la première réponse http://stackoverflow.com/questions/16109121/data-member-validation-iso-4217-currency-and-639-1 -langue veut obtenir iso avec le nom et veut stocker dans la base de données. –

Répondre

3

celui-ci renvoie tous currencySymbols avec son premier nom de la devise anglaise distincte

var currencySymbols = 
     CultureInfo.GetCultures(CultureTypes.SpecificCultures) //Only specific cultures contain region information 
     .Select(x => new RegionInfo(x.LCID)) 
     .GroupBy(x => x.ISOCurrencySymbol) 
     .Select(x => new CurrencyTable() { 
      Iso = x.Key, 
      Name = x.Select(y => y.CurrencyEnglishName).Distinct().FirstOrDefault() 
     }); 

et va ici LINQ-Version:

var symbols = from x in CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
        let region = new RegionInfo(x.LCID) 
        group region by region.ISOCurrencySymbol into g 
        let names = from r in g select r.CurrencyEnglishName 
        select new CurrencyTable() { 
         Iso = g.Key, 
         Name = names.FirstOrDefault() 
        }; 
0

Vous ne peut pas retourner IEnumerable<string,string>. Mais vous pouvez retourner IEnumerable<anonymous tyep>.

Par exemple:

var currencyTables = CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
      .Select(s => new RegionInfo(s.LCID)) 
      .Select(r => new 
      { 
       Iso = r.ISOCurrencySymbol, 
       Name = r.CurrencyEnglishName 
      }).GroupBy(s => s.Iso) 
      .OrderBy(r =>r.Key) 
      .Select(a => new { Iso = a.Key, Name = a.First().Name }); 

Et vous pouvez retourner IEnumerable<CurrencyTable>. Par exemple:

var currencyTables = CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
     .Select(s => new RegionInfo(s.LCID)) 
     .Select(r => new 
     { 
      Iso = r.ISOCurrencySymbol, 
      Name = r.CurrencyEnglishName 
     }).GroupBy(s => s.Iso) 
     .OrderBy(r =>r.Key) 
     .Select(a => new CurrencyTable{ Iso = a.Key, Name = a.FirstOrDefault().Name });