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

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

環境準備

語法說明

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最後計算的結果當輸入參數

參考資料

本篇已同步發表至個人部落格
https://moushih.com/2022ithome14/
鐵人賽文章
為什麼會看到廣告
avatar-img
8會員
39內容數
我是這個部落格的作者,喜歡分享有關投資 💰、軟體開發 💻、占卜 🔮 和虛擬貨幣 🚀 的知識和經驗。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
一代軍師 的其他內容
介紹 LINQ全名是(Language-Integrated Query),是一組以直接將查詢功能整合至C# 語言為基礎之技術的名稱。 大家可以想像SQL有SQL的查詢語法,MySql有MySql的查詢語法,但我們可以只透過LINQ語法,C#會自動幫我們轉換成對應的資料庫查詢語法,有點像是秦始皇統一
介紹 序列化、反序列化概念: 📷 關於泛型委派、解偶、非同步多執行緒、委派的歷史寫法演進之後會專門寫一篇文章跟大家講解 使用方式 測試資料 SerializableAttribute 微軟說明文件 二進位序列化 雖然這裡介紹BinaryFormatter但在 .NET 7中已經屬於過時的方法了
介紹 委派 透過委派可以實現把方法作為參數傳遞 從範例可以看出我們將DoNothing當成參數在傳遞 📷 事件 事件:是帶event關鍵字的委派的實體,可以限制變數被外部直接使用/直接賦予值(安全保障) 特點: 不能直接Invoke() 不能 賦予 null => = null 委派是一個類型
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
介紹 在程式中你看到上面有一個中括號[] 就是特性,它自身沒有任何功能。 📷 特性attribute,和注釋有什麼區別 第一個感受 特性:中括號宣告 錯覺:每一個特性都可以帶來對應的功能 實際上添加後,編譯器會在元素內部產生IL,但是我們是沒辦法直接使用的,而且在metadata會有紀錄 📷
介紹 反射:System.Reflection .Net框架提供的Library,可以讀取並使用metadata Dll-IL-Metadata-反射 透過VS編譯器 編譯成dll/exe 點擊exe的時候,他有一個依賴的環境叫做CLR IL:可以透過ILSpy(反編譯工具) 📷 一般情況
介紹 LINQ全名是(Language-Integrated Query),是一組以直接將查詢功能整合至C# 語言為基礎之技術的名稱。 大家可以想像SQL有SQL的查詢語法,MySql有MySql的查詢語法,但我們可以只透過LINQ語法,C#會自動幫我們轉換成對應的資料庫查詢語法,有點像是秦始皇統一
介紹 序列化、反序列化概念: 📷 關於泛型委派、解偶、非同步多執行緒、委派的歷史寫法演進之後會專門寫一篇文章跟大家講解 使用方式 測試資料 SerializableAttribute 微軟說明文件 二進位序列化 雖然這裡介紹BinaryFormatter但在 .NET 7中已經屬於過時的方法了
介紹 委派 透過委派可以實現把方法作為參數傳遞 從範例可以看出我們將DoNothing當成參數在傳遞 📷 事件 事件:是帶event關鍵字的委派的實體,可以限制變數被外部直接使用/直接賦予值(安全保障) 特點: 不能直接Invoke() 不能 賦予 null => = null 委派是一個類型
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
介紹 在程式中你看到上面有一個中括號[] 就是特性,它自身沒有任何功能。 📷 特性attribute,和注釋有什麼區別 第一個感受 特性:中括號宣告 錯覺:每一個特性都可以帶來對應的功能 實際上添加後,編譯器會在元素內部產生IL,但是我們是沒辦法直接使用的,而且在metadata會有紀錄 📷
介紹 反射:System.Reflection .Net框架提供的Library,可以讀取並使用metadata Dll-IL-Metadata-反射 透過VS編譯器 編譯成dll/exe 點擊exe的時候,他有一個依賴的環境叫做CLR IL:可以透過ILSpy(反編譯工具) 📷 一般情況
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在檢查列表中含有tuple的座標點時,若要給其他演算法做運算時若有其中有tuple有空值時,就會報錯。 本文主要介紹兩種方法可以檢查是否有空值 程式範例1 positon_list =[(42,123),(None,None),(22,11)] for cord in positon_lis
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
  全名為Language Integrated Query,又稱LINQ,它是什麼呢?用在哪裡呢?它是一個擁有「集合元素進行資料查詢」的技術,直接將此技術整合到C#裡,也就是說對於任何資料型態只要是遇到以下這幾個型別:
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在檢查列表中含有tuple的座標點時,若要給其他演算法做運算時若有其中有tuple有空值時,就會報錯。 本文主要介紹兩種方法可以檢查是否有空值 程式範例1 positon_list =[(42,123),(None,None),(22,11)] for cord in positon_lis
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
  全名為Language Integrated Query,又稱LINQ,它是什麼呢?用在哪裡呢?它是一個擁有「集合元素進行資料查詢」的技術,直接將此技術整合到C#裡,也就是說對於任何資料型態只要是遇到以下這幾個型別:
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |