玩轉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
一代軍師
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
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
Python是一種物件導向的程式語言,它讓我們可以使用類別(Class)來定義和創建物件,想像一個物件就像是一個實體,可以包含資料和功能。 舉例來說,一個人可以被視為一個物件,它有姓名、年齡等資料,還可以說話、走路等功能。類別就像是一個模板,它描述了物件的特徵和行為。 Python中,我們使用
Thumbnail
Python是一種物件導向的程式語言,它讓我們可以使用類別(Class)來定義和創建物件,想像一個物件就像是一個實體,可以包含資料和功能。 舉例來說,一個人可以被視為一個物件,它有姓名、年齡等資料,還可以說話、走路等功能。類別就像是一個模板,它描述了物件的特徵和行為。 Python中,我們使用
Thumbnail
談判 是 談論與判斷的組合  思維班的時候 ~我努力地看過案例,看心得看學長學姊的文章,輔導員的問話,用記憶麵包記下所有的"我吞不下的內容" 上了進階班之後我開始想,談判是啥作業一出來的時候我開始設計作業,我又開始想....這些作業跟三角搭不上我想不出除了同溫層,除了我用我的關係去請拜託或要脅分
Thumbnail
談判 是 談論與判斷的組合  思維班的時候 ~我努力地看過案例,看心得看學長學姊的文章,輔導員的問話,用記憶麵包記下所有的"我吞不下的內容" 上了進階班之後我開始想,談判是啥作業一出來的時候我開始設計作業,我又開始想....這些作業跟三角搭不上我想不出除了同溫層,除了我用我的關係去請拜託或要脅分
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
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
想想往事既無記憶,好笑了,就算是腦霧也不至於剩下魚的記憶。 沒有往事就想想最近的事,能記得最近的事,表示我還年輕。 分享課程工作安排 要講課之前需要備課,而在準備資料中要注意的事很多,題目需對應到大綱。 內容要循序漸進,收集資料須對應到內容,內容要懂得釋義…..等。這只是初始階段。 議題步驟...
Thumbnail
想想往事既無記憶,好笑了,就算是腦霧也不至於剩下魚的記憶。 沒有往事就想想最近的事,能記得最近的事,表示我還年輕。 分享課程工作安排 要講課之前需要備課,而在準備資料中要注意的事很多,題目需對應到大綱。 內容要循序漸進,收集資料須對應到內容,內容要懂得釋義…..等。這只是初始階段。 議題步驟...
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這個年代的孩子, 可能很難想像當時年代的小一新生孩子, 一個班級好多好多同學呀! 而且以前還會分上下午時段的上課, 還記得我剛入小學一年級時, 就有55個同學, 我只知道坐我旁邊和前後左右的同學, 要認識全班簡直是大考驗, 加上我記性差, 真的老記不住同學的名字。 我的學校是大學校, 一個年級幾
Thumbnail
這個年代的孩子, 可能很難想像當時年代的小一新生孩子, 一個班級好多好多同學呀! 而且以前還會分上下午時段的上課, 還記得我剛入小學一年級時, 就有55個同學, 我只知道坐我旁邊和前後左右的同學, 要認識全班簡直是大考驗, 加上我記性差, 真的老記不住同學的名字。 我的學校是大學校, 一個年級幾
Thumbnail
『文獻?』 『怎麼找文獻?』 『研究方法? 不是另一門課才剛開始上嗎?』 『你找那一篇文章? 我們要不要協調好?』 『你的PPT模板好美,那裡找的?』 共同敵人是團結人心的好方法 開學數週,同學不是特別熟, 一門要求很多的課,大家談論了起來。 上課前,研究室變熱鬧了, 下課後,研究室人變多了,
Thumbnail
『文獻?』 『怎麼找文獻?』 『研究方法? 不是另一門課才剛開始上嗎?』 『你找那一篇文章? 我們要不要協調好?』 『你的PPT模板好美,那裡找的?』 共同敵人是團結人心的好方法 開學數週,同學不是特別熟, 一門要求很多的課,大家談論了起來。 上課前,研究室變熱鬧了, 下課後,研究室人變多了,
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News