Lambda表达式对List的处理

 

Lambda表达式使得List的过滤和排序更加简洁!

定义一个Employee类:

   1:  public class Employee
   2:  {
   3:      public string FirstName {set; get;}
   4:      public string LastName {set; get;}
   5:      public decimal Salary {set; get;}
   6:      public bool IsManager {set; get;}
   7:  }

再定义一个Employee的列表:

   1:  List<Employee> employees = new List<Employee>( );

1. FindAll()操作

原始的方法:

   1:  foreach (Employee employee in employees)
   2:  {
   3:      if (employee.IsManager == true)
   4:          managers.Add(employee);
   5:  }

Lambda表达式:

   1:  List<Employee> managers = employees.FindAll(employee => employee.IsManager == true);

2. Where()操作

where()和FindAll()类似,有时候用where能使代码更好理解:

   1:  foreach (Employee employee in employees.Where(e => e.IsManager == true))
   2:  {
   3:      // do something
   4:  }

3. Find()操作

Find()返回列表的第一个对象:

   1:  Employee firstManager = employees.Find(employee => employee.IsManager == true);
   2:  if (firstManager == null)
   3:      Console.WriteLine("No managers found in list.");

4. ForEach( )操作

   1:   employees.ForEach(e => e.Salary += 100);

5. OrderBy( )  and  OrderByDescending( )操作

OrderBy()返回一个升序排列的List;OrderByDescending()返回一个降序排列的List:

   1:  List<Employee> sortedList = employees.OrderBy(e => e.Age).ToList();

 

   1:   List<Employee> sortedList = employees.OrderByDescending(e => e.Age).ToList();

6. Sort( )

   1:  employees.Sort((e1, e2) => e1.DOB.CompareTo(e2.DOB));

7. Getting Fancy

   1:  public enum SortOrder { Ascending, Decending };
   2:  public static void Sort<TKey>(ref List<Employee> list, Func<Employee, TKey> sortKey, 
   3:      SortOrder sortOrder)
   4:  {
   5:      if (sortOrder == SortOrder.Ascending)
   6:          list = list.OrderBy(sortKey).ToList();
   7:      else
   8:          list = list.OrderByDescending(sortKey).ToList();
   9:  }

现在可以这样使用:

   1:  Employee.Sort(employees, e => e.Salary, SortOrder.Ascending);

 

文章来源于:

http://www.c-sharpcorner.com/UploadFile/afenster/LambdaExpressionsAreWonderful12022009002148AM/LambdaExpressionsAreWonderful.aspx

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>