2010-04-13 1 views
6

to możliwe, aby napisać folowing użyciu lambda (C#)Przepisywanie oświadczenie przy użyciu 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

jestem ciekaw dlaczego chcesz przepisać to jako lambda. Aby trudniej zrozumieć? –

+0

Być może, aby zaoszczędzić pieniądze na narzędzie Obfuscatora ...;) – gehho

+0

nie .. Jestem bardzo nowy w lambda i linq .. Próbuję użyć tej nowej funkcji .. więc whatevr piszę używając foreach, staram się robić to samo w linq lub lambda. Zasadniczo chcę się tego nauczyć .. – Thinking

Odpowiedz

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! Ludzie powinni wiedzieć o Enumerable.Range..it otwiera wiele drzwi .. – puffpio

+2

To oczywiście działa i odpowiada na pytanie, ale wydaje się * dużo * bardziej czytelne w oryginalnej wersji! –

+3

Teraz pytanie brzmi: czy to wyrażenie lambda jest naprawdę lepsze? Podczas liczenia linii do napisania dla programisty: tak. Rozważając czytelność dla innych programistów, którzy mogą musieć zmodyfikować kod później: absolutnie NIE! Dlatego nie używam często wyrażeń lambda. – gehho

1

Najpierw należy określić wybór, a następnie dodać go do listy przychodzących:

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); 

a może nawet bardziej wyraźne:

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));