2010-04-13 9 views
6

E 'possibile scrivere la folowing utilizzando lambda (C#)riscrittura una dichiarazione utilizzando LINQ (C#)

private static void GetRecordList(List<CustomerInfo> lstCustinfo) 
{ 
    for (int i = 1; i <= 5; i++) 
    { 
     if (i % 2 == 0) 

      lstCustinfo.Add(new CustomerInfo { CountryCode = "USA", CustomerAddress = "US Address" + i.ToString(), CustomerName = "US Customer Name" + i.ToString(), ForeignAmount = i * 50 }); 

     else 
      lstCustinfo.Add(new CustomerInfo { CountryCode = "UK", CustomerAddress = "UK Address" + i.ToString(), CustomerName = "UK Customer Name" + i.ToString(), ForeignAmount = i * 80 }); 

    } 
} 
+1

sono curioso di al motivo per cui vorresti riscriverlo come un lambda. Per renderlo più difficile da capire? –

+0

Forse per risparmiare denaro per uno strumento Obfuscator ...;) – gehho

+0

no .. Sono molto nuovo a lambda e linq .. Sto provando a usare queste nuove funzionalità .. quindi whatevr scrivo usando foreach, provo a fare lo stesso in linq o lambda .. Fondamentalmente voglio impararlo .. – Thinking

risposta

7
List<CustomerInfo> lstCustinfo = 
    Enumerable.Range(1, 5).Select(i => (i % 2 == 0) 
     ? new CustomerInfo { CountryCode = "USA", CustomerAddress = "US Address" + i.ToString(), CustomerName = "US Customer Name" + i.ToString(), ForeignAmount = i * 50 } 
     : new CustomerInfo { CountryCode = "UK", CustomerAddress = "UK Address" + i.ToString(), CustomerName = "UK Customer Name" + i.ToString(), ForeignAmount = i * 80 }) 
    .ToList(); 
+1

Yup! Le persone dovrebbero conoscere Enumerable.Range..it apre molte porte .. – puffpio

+2

Questo ovviamente funziona e risponde alla domanda, ma sembra * molto * più leggibile nella versione originale! –

+3

Ora, la domanda è: questa espressione lambda è davvero migliore? Quando contate le righe da scrivere per lo sviluppatore: sì. Quando si considera la leggibilità per altri sviluppatori che potrebbero dover modificare il codice in seguito: assolutamente NO! Ecco perché non uso espressioni lambda molto spesso. – gehho

1

è necessario prima definire la selezione, quindi aggiungerlo alla lista in entrata:

var range = Enumerable.Range(1, 5); 
var customers = from i in range 
       select (i % 2 == 0) ? 
         new CustomerInfo 
         { 
            CountryCode = "USA", 
            CustomerAddress = "US Address" + i, 
            CustomerName = "US Customer Name" + i, 
            ForeignAmount = i * 50 
         } 
         : 
         new CustomerInfo 
         { 
            CountryCode = "UK", 
            CustomerAddress = "UK Address" + i, 
            CustomerName = "UK Customer Name" + i, 
            ForeignAmount = i * 80 
         }; 

lstCustinfo.AddRange(customers); 

O forse ancora più esplicito:

var range = Enumerable.Range(1, 5); 
var usCustomers = from i in range 
        where i % 2 == 0 
       select new CustomerInfo 
         { 
            CountryCode = "USA", 
            CustomerAddress = "US Address" + i, 
            CustomerName = "US Customer Name" + i, 
            ForeignAmount = i * 50 
         }; 

var ukCustomers = from i in range 
       where i % 2 != 0 
       select new CustomerInfo 
         { 
            CountryCode = "UK", 
            CustomerAddress = "UK Address" + i, 
            CustomerName = "UK Customer Name" + i, 
            ForeignAmount = i * 80 
         }; 

lstCustinfo.AddRange(usCustomers.Union(ukCustomers)); 
Problemi correlati