1. 程式人生 > >【轉】編寫高質量代碼改善C#程序的157個建議——建議27:在查詢中使用Lambda表達式

【轉】編寫高質量代碼改善C#程序的157個建議——建議27:在查詢中使用Lambda表達式

with 代碼 esc red 工作 一行 derby 命名空間 any

建議27:在查詢中使用Lambda表達式

LINQ實際上是基於擴展方法和Lambda表達式的。任何LINQ查詢都能通過擴展方法的方式來代替。

var personWithCompanyList = from person in personList
                            select new { PersonName = person.Name, CompanyName = person.CompanyID==0?"Micro":"Sun" };
foreach (var item in personWithCompanyList)
{
    Console.WriteLine(item.ToString());
}

等價於:

foreach (var item in personList.Select(person=>new {PersonName=person.Name,CompanyName=person.CompanyID==0?"Micro":"Sun"}))
{
    Console.WriteLine(item.ToString());
}

針對LINQ設計的擴展方法大多應用了泛型委托。System命名空間定義了泛型委托Action、Func和Predicate。Action用於執行一個操作,所以它沒有返回值;Func用於執行一個操作並返回一個值;Predicate用於定義一組條件並判讀參數是否符合條件。Select擴展方法接受的就是一個Func委托,而Lambda表達式就是一個簡潔的委托,運算符“=>”左邊代表的是方法的參數,右邊的是方法體。

我們通過直接調用擴展方法來使用Lambda表達式,這樣即完成了功能,也減少了一行代碼。在實際工作中,應該靈活運用這種方式。

foreach (var item in personWithCompanyList.Where(p=>p.CompanyName=="Sun"))
{
    Console.WriteLine(item.PersonName);
}

輸出:

Mike

Steve

調用OrderByDescending擴展方法,針對PersonName排序:

foreach (var item in personList.OrderByDescending(person=>person.Name))
{
    Console.WriteLine(item.Name);
}

輸出:

Steve
Rose
Mike

轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技

【轉】編寫高質量代碼改善C#程序的157個建議——建議27:在查詢中使用Lambda表達式