LINQ的實作練習

因為一直不是很喜歡委派(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