Linq 語法筆記

摘要:Linq 語法筆記

SELECT

Student.where( c => (c.Sexual == "Man") )
       .Select(
	     c =>
		   new
		   {
		     Score = c.Score,
			 Name  = c.Name,
			 Number = c.Number
		   }
	   )

//用SELECT (NEW) 可以指定欄位

 

SELECT MANY

請參考
http://ithelp.ithome.com.tw/question/10103009

 

WHERE

Where可以去呼叫其它涵式(LINQ寫法)

FROM n in number

WHERE isbiggerthan100(n)

SELECT n;

 

isbiggerthan100是個回傳bool的函式

 

OfType 

篩選回傳資料型態所用的

http://ithelp.ithome.com.tw/question/10103873

 

OrderBy ThenBy

var queryOrder = orders.OrderBy (e => e.CustomerId).ThenBy(e => e.OrderDate)  

//請記住,要雙重排序 第二個一定要用ThenBy
//用Orderby是不會錯 但是結果會跟想像的不一樣 主要排序以第二個orderby為主

 

First、Last、Single 及對應的OrDefault

前面四個都是取不到值會有EXCEPTION,後面會給預設的數值

FIRST: 回傳結果的第一項資料

LAST:  回傳結果的最後一項資料

Single: 回傳結果為空值 拋出 ArgumentNullException

            回傳包含多個項目,會拋出 InvalidOperationException

            Single要剛好等於一個,且.NET4.0才支援

 

Take、Skip

Take:表示要拿取幾筆資料,若資料不足輸入的筆數則就全拿

  1. var query = list.OrderBy(l => l).Take(5);  

Skip: 跳過前幾筆資料,用法同上

 

Any、 All、 Contains

Any:

第一個多載方法不傳入任何參數,若不為空則傳回True反之false

第二個方法可以讓我們傳入一項委派,自行決定序列中的項目邏輯怎樣為真(也是傳回TRUE或FLASE

list.Any( c => c == "string")

list.Any( c => c.Length > 10)

 

All:要求我們傳入一個委派,但來源序列需要通通符合條件才為True,用法同Any

若來源是空的則回傳True

 

Contains(3.5不支援):

用來判斷來源中是否有包含的項目,若符合傳回True

 

Range、Repeat、Empty、 Distinct

Range用Enumerable.Range呼叫並傳入兩個INT參數,Range(起始值, 數量)
 

var squares = Enumerable.Range(2, 4).Select(i => i * i); 
foreach (var num in squares) 
{ 
    Console.WriteLine(num); 
} 
Console.WriteLine(squares.GetType());

/* 輸出:
4 
9 
16 
25
typeof (IEnumerable)
*/

 

Repeat

同Range,使用Enumerable.Repeat並有兩個參數

第一個參數為要重複的項目,第二個為要重複的次數

var echoes = Enumerable.Repeat("Hello~ ", 3); 
foreach (var s in echoes) 
{ 
    Console.WriteLine(s); 
} 
Console.WriteLine(echoes.GetType());
/* 輸出:
Hello~ 
Hello~ 
Hello~ 
typeof (IEnumerable) 
*/

 

Empty:

使用Enumerable.Empty呼叫,呼叫時不用傳入參數只要告訴他型別即可

IEnumerable sName = Enumerable.Empty(); 

 

Distinct

把不一樣的項目列出

list.distinct();

 

此篇都是參考 smartleos 的教學文而記錄給自己看得,若需要詳細教學文請去看原作者的文章

真的寫得很棒。