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);
文章来源于:
