2010-04-13 1 views
6

Можно ли написать на следующий с помощью лямбды (C#)Переписывая заявление с помощью 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

мне очень интересно, как почему вы хотите переписать это как лямбду. Сделать это труднее понять? –

+0

Возможно, чтобы сэкономить деньги на инструмент Obfuscator ...;) – gehho

+0

нет .. Я очень новичок в лямбда-и linq .. Я пытаюсь использовать эти новые функции .. так что я пишу, используя foreach, я пытаюсь сделать то же самое в linq или лямбда .. В принципе, я хочу это изучить .. – Thinking

ответ

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! Люди должны знать об Enumerable.Range .. открывает много дверей .. – puffpio

+2

Это, очевидно, работает и отвечает на вопрос, но кажется, что * много * более читаемо в оригинальной версии! –

+3

Теперь возникает вопрос: действительно ли это лямбда-выражение? При подсчете строк для разработчика для разработчика: да. При рассмотрении удобочитаемости для других разработчиков, которым, возможно, придется впоследствии модифицировать код: абсолютно НЕТ! Вот почему я часто не использую лямбда-выражения. – gehho

1

Вы должны сначала определить выбор, а затем добавить его в список входящих:

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

Или, возможно, еще более категорично:

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)); 
Смежные вопросы