LINQ筆記:LINQ的FindAll、Contains實作練習

因為一直不是很喜歡委派(Delegate)與黏巴達表示式(Lambda Expression),加上排斥LINQ對於資料庫實體連接層的抽象化,所以對於LINQ一直沒有多大的好感。但是,現在的程式碼出現越來越多混合式的寫法,再加上泛型的應用上已經離不太開LINQ,因此,不去理解與學習一些LINQ方面的知識好像也說不太過去。因此,在這邊就寫一個小小的範例自我練習一下吧!

程式碼如下,懂Lambda Expression的人應該不會有多大的閱讀困難才是。

using System;
using System.Linq;

namespace LINQ
{
  class employee  //利用自動實作建立一個員工類別
  {
    public string name { get; set; }
    public int age { get; set; }
    public bool sex { get; set; }
  }
  
  class Program
  {
    static void Main(string[] args)
    {
      var oTemp = new System.Collections.Generic.List<employee>();
      oTemp.Add(new employee { name = "John", age = 30, sex = true });
      oTemp.Add(new employee { name = "Leen", age = 20, sex = false });
      oTemp.Add(new employee { name = "Mary", age = 40, sex = false });
      oTemp.Add(new employee { name = "Fool", age = 60, sex = false });
      oTemp.Add(new employee { name = "Cool", age = 50, sex = true });

      //找出名字內有字母n的員工
      var oResult_1 = oTemp.FindAll(x => x.name.Contains("n"));
      
      //找出名字內有字母o的員工,而且進行排序
      var oResult_2 = oTemp
        .Where<employee>(x => x.name.Contains("o"))
        .OrderBy<employee, int>(x => x.age);

      //列印資料
      foreach (var x in oResult_1) { Console.WriteLine("Name: {0}, Age: {1}, Sex:{2}", x.name, x.age, x.sex); }
      Console.WriteLine("---");
      foreach (var x in oResult_2) { Console.WriteLine("Name: {0}, Age: {1}, Sex:{2}", x.name, x.age, x.sex); }
      
      Console.Read();
    }
  }
}

輸出結果如下:

Name: John, Age: 30, Sex:True
Name: Leen, Age: 20, Sex:False
---
Name: John, Age: 30, Sex:True
Name: Cool, Age: 50, Sex:True
Name: Fool, Age: 60, Sex:False
LINQ Implementation LambdaExpression