## 前言 在工作上使用的 LINQ 的機會很多,針對語法的基本使用也不是問題,但對LINQ的了解就僅限於工作上有使用到的,所以決定來將LINQ做個理論上的整理。 ## LINQ 全名 Language Integrated Query,以C#語言為基準,提供出一套資料查詢的方法,類型有 **LINQ to Object**、**LINQ to SQL**、**LINQ to XML**,還有在Entity Framework中提供的 **LINQ to Entities**,利用 LINQ 可以使用較少且清晰的程式碼邏輯,將資料做篩選、排序...等資料查詢邏輯。 ### LINQ to Object 針對存放在記憶體中的資料提供的 LINQ 查詢方式,只要集合類別有實作 IEnumerable、IEnumerable<T> 或 IQueryable<T> 介面,就能以 LINQ to Object 進行查詢,例如:List、Dictionary。 * 程式碼範例 ```csharp= //建立資料 List<string> city = new List<string> {"Taipei","Japan","Seoul" }; //以查詢運算式撰寫 LINQ var query = from c in city where c == "Taipei" select c; //執行查詢 foreach (string output in query) { Console.WriteLine(output); } ``` LINQ 查詢分為三個步驟,建立資料、撰寫查詢、執行查詢,所以在撰寫查詢運算式時,LINQ 還尚未被執行,而是需使用到查詢結果時,才會進行查詢。 ### LINQ to XML 針對 XML 資料提供的 LINQ 方法,可進行查詢及修改。 * 範例 XML ```xml= <School Name="DemoSchool" Level="Junior"> <Teacher Gender="Male"> <Student Name="Cindy"> <Grade Subject="Math">100</Grade> <Grade Subject="Chinese">88</Grade> </Student> </Teacher> <Teacher Gender="Female"> <Student Name="Johnson"> <Grade Subject="English">70</Grade> <Grade Subject="Math">56</Grade> <Grade Subject="Chinese">76</Grade> </Student> </Teacher> </School> ``` * 程式碼:取出所有學生的姓名 ```csharp= string xmlPath = Path.Combine(Directory.GetCurrentDirectory(), "School.xml"); XElement xmlData = XElement.Load(xmlPath); var query = from student in xmlData.Descendants("Teacher") select student; foreach (var item in query.Descendants("Student")) { Console.WriteLine((string)item.Attribute("Name")); } ``` * LINQ to XML 詳細的使用,放上 MSDN 系列教學連結 [MSDB](https://learn.microsoft.com/zh-tw/dotnet/standard/linq/linq-xml-overview) <!-- ### LINQ to SQL FSJSKLFJKLDASFJDKLJFSDKLJFLSKDJFSDLKFJSLKDFJLSDKF--> ### LINQ to Entities 在 Entity Framework 架構下,也可以使用 LINQ 對 Entity 中的資料進行查詢 * 程式碼 ```csharp= using (DemoEntities entities = new DemoEntities()) { var query = from student in entities.Student where student.Name == "Kevin" select student.name foreach (string name in query) { Console.WriteLine(name); } } ``` * LINQ to Entities MSDN 教學連結 [MSDN](https://learn.microsoft.com/zh-tw/dotnet/framework/data/adonet/ef/language-reference/linq-to-entities) ###### tags: `C#` `LINQ`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up