摘要: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:表示要拿取幾筆資料,若資料不足輸入的筆數則就全拿
- 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 的教學文而記錄給自己看得,若需要詳細教學文請去看原作者的文章
真的寫得很棒。