玩轉C#之【LINQ 語法介紹】

更新於 發佈於 閱讀時間約 12 分鐘

環境準備

準備用測試資料

語法說明

Where

應用場景:過濾、查詢等功能
說明:與SQL命令中的where功能相似,都是過濾範圍內的數值

例如:使用where篩選,年紀大於30的同學

List<Student> students = GetStudentList();
var student = students.Where(x=>x.Age > 30);

First

應用場景:篩選出第一筆資料,但資料如果是空的會跳Exception
說明:返回集合中的第一個元素,其實就是SQL命令中加上TOP(1)

簡單用法:
例如:讀取第一筆學生資料

List<Student> students = GetStudentList();
var student = students.First();

2.加入條件:

例如:讀取學生年紀小於25的第一筆資料

List<Student> students = GetStudentList();
var student = students.First(x=>x.Age < 25);

FirstOrDefault

應用場景:篩選出第一筆資料,但資料有可能是空的
說明:返回集合中的第一個元素,其實就是SQL命令中加上TOP(1)

例如:讀取學生年紀小於1的第一筆資料

List<Student> students = GetStudentList();
var student = students.FirstOrDefault(x=>x.Age < 1);

Select

應用場景:指定想要"拿到的資料"
說明:和SQL命令中的Select作用相似,查詢表達是中的Select及所接子句是放在表達是最後並把子句中的變數也就是結果返回回來,延遲。

簡單用法:
例如:取得年紀大於5的學生的姓名

List<Student> students = GetStudentList();
var student = students.Where(x=>x.Age >5).Select(x=>x.Name);

2.匿名用法:

例如:取得年紀大於5的學生姓名及班級的匿名類別

List<Student> students = GetStudentList();
var student = students.Where(x => x.Age > 5).Select(x =>new{x.Name,x.Age});

3.條件形式:

说明:生成SQL語法為:case when condition then else。

例如:取得年紀大於5的學生姓名及班級的匿名類別

List<Student> students = GetStudentList();
var student = students.Select(x =>new{x.Name,age = x.Age > 25?”老妹”:”正妹”});

4.指定類型型態

例如:已經有一個Girl類別,要將學生的類別資料輸出給Girl

public class Girl
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Student> students = GetStudentList();
var student = students.Select(x =>new Girl{Name = x.Name,Age = x.Age});

5.Distinct
說明:篩選字段中不相同的值。用于查询不重复的结果集。生成SQL語法為:SELECT DISTINCT [Age] FROM [Students]

List<Student> students = GetStudentList();
var student = students.Select(x =>x.Age).Distinct();

Count/Sum/Min/Max/Avg用法雷同
應用場景:統計資料,求資料數量、總和、最小值、最大值、平均值

Count

說明:返回集合中的元素各數,返回INT型別:不延遲。產生SQL語法:SELECT COUNT(*) FROM

簡單用法:
例如:計算學生總數

List<Student> students = GetStudentList();
var student = students.Count();

2.帶入條件:

例如:計算年紀大於30的學生總數

List<Student> students = GetStudentList();
var student = students.Count(x=>x.Age>30);

LongCount
說明:返回集合元素各數,返回LONG型別;不延遲,對於元素各數較多的集合可是情況選用LongCount來統計數量,比較精準,生成SQL語法為:SELECT COUNT_BIG(*) FROM

例如:計算學生總數

List<Student> students = GetStudentList();
var student = students.LongCount();

Sum
說明:返回集合中數值型別元素之和,集合應為INT類型;不延遲。生成SQL語法為:SELECT SUM(…) FROM

Min
說明:返回集合中元素的最小值;不延遲,生成SQL語法為:SELECT MIN(…) FROM

MAX
說明:返回集合中元素的最大值;不延遲,生成SQL語法為:SELECT MAX(…) FROM

Average
說明:返回集合中數值類型元素的平均值,集合應為數字型別集合,返為值型別為double;不延遲,生成SQL語法為SELECT AVG(…) FROM

Aggregate
說明:根據輸入的表達式獲取聚合值;不延遲。

1.第一種用法:

public static TSource Aggregate<TSource>( this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);
func 第一個參數:初始值是元素第一筆資料,並且會是之前元素的回傳結果
func 第二個參數:目前元素資料
func 回傳值:第一個參數最後的結果

反編譯:

public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func)
{
if (source == null)
{
throw Error.ArgumentNull(“source”);
}
if (func == null)
{
throw Error.ArgumentNull(“func”);
}
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
if (!enumerator.MoveNext())
{
throw Error.NoElements();
}
TSource val = enumerator.Current;
while (enumerator.MoveNext())
{
val = func(val, enumerator.Current);
}
return val;
}
}

例如:要計算陣列元素的總和

int[] Source = new int[] { 2, 7, 5, 1, 6, 8, 3 };
Source.Aggregate((total, next) => total + next)

2.第二種用法:

public static TAccumulate Aggregate<TSource, TAccumulate>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);
seed: 初始值(自定義)
Func:彙整資料所做的處理函式
func第一個參數:初始值是seed,並且會是之前元素的回傳結果
func 第二個參數:目前元素資料
func 回傳值:第一個參數最後的結果

反編譯:

public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func)
{
if (source == null)
{
throw Error.ArgumentNull(“source”);
}
if (func == null)
{
throw Error.ArgumentNull(“func”);
}
TAccumulate val = seed;
foreach (TSource item in source)
{
val = func(val, item);
}
return val;
}

例如:將60再加上陣列每一個元素的總和

int[] Source = new int[] { 2, 7, 5, 1, 6, 8, 3 };
Source.Aggregate(60,(total, next) => total + next);

第三種用法:

public static TResult Aggregate<TSource, TAccumulate, TResult>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);
seed: 初始值(自定義)
Func:彙整資料所做的處理函式
func第一個參數:初始值是seed,並且會是之前元素的回傳結果
func 第二個參數:目前元素資料
func 回傳值:第一個參數最後的結果
第二個Func會將第一個func最後計算的結果當輸入參數

參考資料

語言整合式查詢 (LINQ) (C#)

本篇已同步發表至個人部落格
https://moushih.com/2022ithome14/

鐵人賽文章

https://ithelp.ithome.com.tw/articles/10290279

留言
avatar-img
留言分享你的想法!
avatar-img
一代軍師
8會員
39內容數
我是這個部落格的作者,喜歡分享有關投資 💰、軟體開發 💻、占卜 🔮 和虛擬貨幣 🚀 的知識和經驗。
一代軍師的其他內容
2024/02/12
盤面基本組成要素 十天干:甲乙丙丁戊己庚辛壬癸 十二地支:子丑寅卯辰巳午未申酉戌亥 五行:木、火、土、金、水 八門:休、生、傷、杜、景、死、驚、開 八神:符、蛇、陰、合、虎、武、九、天 九星:蓬、任、沖、輔、英、芮、柱、心、禽 八卦:坎、艮、震、兌、離、坤、乾 六個旬首:甲子戊、甲戊
Thumbnail
2024/02/12
盤面基本組成要素 十天干:甲乙丙丁戊己庚辛壬癸 十二地支:子丑寅卯辰巳午未申酉戌亥 五行:木、火、土、金、水 八門:休、生、傷、杜、景、死、驚、開 八神:符、蛇、陰、合、虎、武、九、天 九星:蓬、任、沖、輔、英、芮、柱、心、禽 八卦:坎、艮、震、兌、離、坤、乾 六個旬首:甲子戊、甲戊
Thumbnail
2023/10/22
Drawmind 畫鏡 主要目的是透過藝術治療,幫助個人減輕情感壓力、提升心理健康,並提供一個具有專業指導的平台,讓用戶進行情感表達、自我探索和康復。
Thumbnail
2023/10/22
Drawmind 畫鏡 主要目的是透過藝術治療,幫助個人減輕情感壓力、提升心理健康,並提供一個具有專業指導的平台,讓用戶進行情感表達、自我探索和康復。
Thumbnail
2023/08/14
原理 八字 八字不等於出生時間 八字是根據每個兩小時為一個單位的時辰來劃分的。 它包括年、月、日和時這四個要素,其中年、月、日分別對應天干地支。 即使缺少具體出生時刻,也仍然可以排出命盤進行分析。 紫微斗數 需要精確的出生的小時數,因為出生時間的稍微差異呈現出來的命盤會有天差地別,從而
Thumbnail
2023/08/14
原理 八字 八字不等於出生時間 八字是根據每個兩小時為一個單位的時辰來劃分的。 它包括年、月、日和時這四個要素,其中年、月、日分別對應天干地支。 即使缺少具體出生時刻,也仍然可以排出命盤進行分析。 紫微斗數 需要精確的出生的小時數,因為出生時間的稍微差異呈現出來的命盤會有天差地別,從而
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
Python是一種物件導向的程式語言,它讓我們可以使用類別(Class)來定義和創建物件,想像一個物件就像是一個實體,可以包含資料和功能。 舉例來說,一個人可以被視為一個物件,它有姓名、年齡等資料,還可以說話、走路等功能。類別就像是一個模板,它描述了物件的特徵和行為。 Python中,我們使用
Thumbnail
Python是一種物件導向的程式語言,它讓我們可以使用類別(Class)來定義和創建物件,想像一個物件就像是一個實體,可以包含資料和功能。 舉例來說,一個人可以被視為一個物件,它有姓名、年齡等資料,還可以說話、走路等功能。類別就像是一個模板,它描述了物件的特徵和行為。 Python中,我們使用
Thumbnail
雖然徵文期限好像過了,但今天才看到題目,應該還是可以寫一下吧。身為快畢業的老人,大學念著念著對未來還是有些迷茫,但若是問到拿學分、人際關係、期中期末報告......諸如此類,對於在學校的生存之道或待人處事,幸好是有念出些心得。
Thumbnail
雖然徵文期限好像過了,但今天才看到題目,應該還是可以寫一下吧。身為快畢業的老人,大學念著念著對未來還是有些迷茫,但若是問到拿學分、人際關係、期中期末報告......諸如此類,對於在學校的生存之道或待人處事,幸好是有念出些心得。
Thumbnail
環境準備 準備用測試資料 語法說明 Where 應用場景:過濾、查詢等功能 說明:與SQL命令中的where功能相似,都是過濾範圍內的數值 例如:使用where篩選,年紀大於30的同學 First 應用場景:篩選出第一筆資料,但資料如果是空的會跳Exception 說明:返回集合中的第一個元素,其實
Thumbnail
環境準備 準備用測試資料 語法說明 Where 應用場景:過濾、查詢等功能 說明:與SQL命令中的where功能相似,都是過濾範圍內的數值 例如:使用where篩選,年紀大於30的同學 First 應用場景:篩選出第一筆資料,但資料如果是空的會跳Exception 說明:返回集合中的第一個元素,其實
Thumbnail
一、「追尋」的定義 1. 追尋一個自己喜歡的人 2. 追尋自己想住的地方,地點在南部 3. 追求自己想成為地人,可以寫作、可以站在講台上、可以對著文字發呆 4. 追尋理想的生活 二、選擇上述一個「追尋」,進行書寫 三、追尋過程產生的行動
Thumbnail
一、「追尋」的定義 1. 追尋一個自己喜歡的人 2. 追尋自己想住的地方,地點在南部 3. 追求自己想成為地人,可以寫作、可以站在講台上、可以對著文字發呆 4. 追尋理想的生活 二、選擇上述一個「追尋」,進行書寫 三、追尋過程產生的行動
Thumbnail
想想往事既無記憶,好笑了,就算是腦霧也不至於剩下魚的記憶。 沒有往事就想想最近的事,能記得最近的事,表示我還年輕。 分享課程工作安排 要講課之前需要備課,而在準備資料中要注意的事很多,題目需對應到大綱。 內容要循序漸進,收集資料須對應到內容,內容要懂得釋義…..等。這只是初始階段。 議題步驟...
Thumbnail
想想往事既無記憶,好笑了,就算是腦霧也不至於剩下魚的記憶。 沒有往事就想想最近的事,能記得最近的事,表示我還年輕。 分享課程工作安排 要講課之前需要備課,而在準備資料中要注意的事很多,題目需對應到大綱。 內容要循序漸進,收集資料須對應到內容,內容要懂得釋義…..等。這只是初始階段。 議題步驟...
Thumbnail
『文獻?』 『怎麼找文獻?』 『研究方法? 不是另一門課才剛開始上嗎?』 『你找那一篇文章? 我們要不要協調好?』 『你的PPT模板好美,那裡找的?』 共同敵人是團結人心的好方法 開學數週,同學不是特別熟, 一門要求很多的課,大家談論了起來。 上課前,研究室變熱鬧了, 下課後,研究室人變多了,
Thumbnail
『文獻?』 『怎麼找文獻?』 『研究方法? 不是另一門課才剛開始上嗎?』 『你找那一篇文章? 我們要不要協調好?』 『你的PPT模板好美,那裡找的?』 共同敵人是團結人心的好方法 開學數週,同學不是特別熟, 一門要求很多的課,大家談論了起來。 上課前,研究室變熱鬧了, 下課後,研究室人變多了,
Thumbnail
談判 是 談論與判斷的組合  思維班的時候 ~我努力地看過案例,看心得看學長學姊的文章,輔導員的問話,用記憶麵包記下所有的"我吞不下的內容" 上了進階班之後我開始想,談判是啥作業一出來的時候我開始設計作業,我又開始想....這些作業跟三角搭不上我想不出除了同溫層,除了我用我的關係去請拜託或要脅分
Thumbnail
談判 是 談論與判斷的組合  思維班的時候 ~我努力地看過案例,看心得看學長學姊的文章,輔導員的問話,用記憶麵包記下所有的"我吞不下的內容" 上了進階班之後我開始想,談判是啥作業一出來的時候我開始設計作業,我又開始想....這些作業跟三角搭不上我想不出除了同溫層,除了我用我的關係去請拜託或要脅分
Thumbnail
這個年代的孩子, 可能很難想像當時年代的小一新生孩子, 一個班級好多好多同學呀! 而且以前還會分上下午時段的上課, 還記得我剛入小學一年級時, 就有55個同學, 我只知道坐我旁邊和前後左右的同學, 要認識全班簡直是大考驗, 加上我記性差, 真的老記不住同學的名字。 我的學校是大學校, 一個年級幾
Thumbnail
這個年代的孩子, 可能很難想像當時年代的小一新生孩子, 一個班級好多好多同學呀! 而且以前還會分上下午時段的上課, 還記得我剛入小學一年級時, 就有55個同學, 我只知道坐我旁邊和前後左右的同學, 要認識全班簡直是大考驗, 加上我記性差, 真的老記不住同學的名字。 我的學校是大學校, 一個年級幾
Thumbnail
回顧一路下來的成長過程,是回憶、是學習、是見聞、是醞釀;其中有歡樂、有悲傷、有火花、有感慨。 記得在國小的第一次段考,只有國文、數學兩項科目的考試上,在班級內出現了同學A、同學B兩位滿分。 問題來了:誰是第一名?
Thumbnail
回顧一路下來的成長過程,是回憶、是學習、是見聞、是醞釀;其中有歡樂、有悲傷、有火花、有感慨。 記得在國小的第一次段考,只有國文、數學兩項科目的考試上,在班級內出現了同學A、同學B兩位滿分。 問題來了:誰是第一名?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News