<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
語言整合查詢 (LINQ) (C#) | Microsoft 官方檔案
LINQ總共包括五個部分:
| 程式集 | 名稱空間 | 描述 |
---|---|---|---|
LINQ to Objects | System.Core.dll | System.Linq | 提供對記憶體中集合操作的支援 |
LINQ to XML | System.Xml.Linq.dll | System.Xml.Linq | 提供對XML資料來源的操作的支援 |
LINQ to SQL | System.Data.Linq.dll | System.Data.Linq | 提供對Sql Server資料來源操作的支援。(微軟已宣佈不再更新,推薦使用LINQ to Entities) |
LINQ to DataSet | System.Data.DataSetExtensions.dll | System.Data | 提供對離線資料集DataTable操作的支援。 |
LINQ to Entities | System.Core.dll 和System.Data.Entity.dll | System.Linq和System.Data.Objects | LINQ to Entities 是 Entity Framework 的一部分並且取代LINQ to SQL 作為在資料庫上使用 LINQ 的標準機制。 |
目前,除了以下的,還可以下載其他第三方提供程式,例如LINQ to JSON、LINQ to MySQL、LINQ to Amazon、LINQ to Flickr和LINQ to SharePoint。無論使用什麼資料來源,都可以通過LINQ使用相同的API進行操作。
LINQ查詢表示式以from子句開頭,以select子句或group子句結束。
在兩個子句之間,可以使用where、orderby、join、let等查詢操作符。
關鍵字有: from 、where 、select 、group 、into 、orderby、join、let、in、on、equals、by、ascending、descending等。
編譯器會在程式編譯時轉換LINQ查詢,以呼叫相應的擴充套件方法。
下面是一個簡單的範例,查詢一個int陣列中小於5的元素,並按照從小到大的順序排列:
int[] arr = new int[] { 1, 4, 2, 6, 7, 9, 5, 1, 2, 4 }; var query = from r in arr where r < 5 orderby r select r; foreach (var item in query) { Console.WriteLine(item); } Console.ReadLine();
Linq語句最終被轉換為呼叫IEnumerable<T>的擴充套件方法,在System.Linq.Enumerable靜態類中定義了N多擴充套件。所以只要繼承與IEnumerable的類都支援Linq查詢 。
標準查詢操作符
Enumberable 類定義的標準查詢操作符。
LINQ具有“延遲計算”的特性。
Linq的執行不是在Linq的賦值語句執行,而是在通過foreach遍歷存取結果時執行。
var names = new List<string> { "Nino", "Alberto", "Juan", "Mike", "Phil" }; var namesWithJ = (from n in names where n.StartsWith("J") orderby n select n); Console.WriteLine("First iteration"); foreach (string name in namesWithJ) { Console.WriteLine(name); } Console.WriteLine(); names.Add("John"); names.Add("Jim"); names.Add("Jack"); names.Add("Denny"); Console.WriteLine("Second iteration"); foreach (string name in namesWithJ) { Console.WriteLine(name); }
返回的結果是:
兩次遍歷的結果不一樣,說明執行並不是在Linq的定義語句執行,而是在foreach執行。
換成如下,兩次執行結果就一樣了。
var namesWithJ = (from n in names where n.StartsWith("J") orderby n select n ).ToList();
按字母順序整理:
Cast,Concat,DefaultIfEmpty,Distinct,Except,GroupBy,GroupJoin,Intersect,Join,OfType,OrderBy,OrderByDescending,Repeat,Reverse,Select,SelectMany,Skip,SkipWhile,Take,TakeWhile,ThenBy,ThenByDescending,Union,Where,Zip
對一系列源元素執行聚合函數的查詢必須首先回圈存取這些元素。Count、Max、Average 和 First 就屬於此類查詢。
由於查詢本身必須使用 foreach 以便返回結果,因此這些查詢在執行時不使用顯式 foreach 語句,直接立即執行。
Aggregate,All,Any,Average,Contains,Count,ElementAt,ElementAtOrDefault,Empty,First,FirstOrDefault,Last,LastOrDefault,LongCount,Max,Min,Range,SequenceEqual,Single,SingleOrDefault,Sum,ToArray,ToDictionary,ToList,ToLookup
注意:特殊的AsEnumerable運運算元,用於處理LINQ to Entities操作遠端資料來源,將IQueryable遠端資料立即轉化為原生的IEnumerable集合。若AsEnumerable接收引數是IEnumerable記憶體集合則什麼都不做。
若要強制立即執行任意查詢並快取其結果,可以呼叫 ToList<TSource> 或 ToArray<TSource> 方法。
通過呼叫 ToList 或 ToArray,可以將所有資料快取在單個集合物件中。
var numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList(); var numQuery3 = (from num in numbers where (num % 2) == 0 select num).ToArray();
語言整合查詢 (LINQ) 不僅可用於檢索資料,而且還是一個功能強大的資料轉換工具。
通過使用 LINQ 查詢,您可以將源序列用作輸入,並採用多種方式修改它以建立新的輸出序列。您可以通過排序和分組來修改該序列,而不必修改元素本身。
但是,LINQ 查詢的最強大的功能是能夠建立新型別。這一功能在 select 子句中實現。
例如,可以執行下列任務:
class Student { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } public List<int> Scores { get; set; } } class Teacher { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string City { get; set; } } private static void Main(string[] args) { //建立第一個資料來源 var students = new List<Student>() { new Student () { Age = 23, City = "廣州", Name = "小C", Scores = new List<int> () { 85, 88, 83, 97 } }, new Student () { Age = 18, City = "廣西", Name = "小明", Scores = new List<int> () { 86, 78, 85, 90 } }, new Student () { Age = 33, City = "夢裡", Name = "小叄", Scores = new List<int> () { 86, 68, 73, 97 } } }; //建立第二個資料來源 var teachers = new List<Teacher>() { new Teacher () { Age = 35, City = "夢裡", Name = "啵哆" }, new Teacher () { Age = 28, City = "雲南", Name = "小紅" }, new Teacher () { Age = 38, City = "河南", Name = "麗麗" } }; //建立查詢 var peopleInDreams = (from student in students where student.City == "夢裡" select student.Name) .Concat(from teacher in teachers where teacher.City == "夢裡" select teacher.Name); //執行查詢 foreach (var person in peopleInDreams) { Console.WriteLine(person); } Console.Read(); }
結果
小叄
啵哆
1. 若要只選擇源元素的一個成員,請使用點運算。
var query = from cust in Customers select cust.City;
2. 若要建立包含源元素的多個屬性的元素,可以使用具有命名物件或匿名型別的物件初始值設定項。
var query = from cust in Customer select new {Name = cust.Name, City = cust.City};
//建立資料來源 var students = new List<Student>() { new Student() { Age = 18, Name = "小A", Scores = new List<int>() {88,85,74,66 } }, new Student() { Age = 35, Name = "小B", Scores = new List<int>() {88,85,74,66 } }, new Student() { Age = 28, Name = "小啥", Scores = new List<int>() {88,85,74,66 } } }; //建立查詢 var studentsToXml = new XElement("Root", from student in students let x = $"{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}" select new XElement("student", new XElement("Name", student.Name), new XElement("Age", student.Age), new XElement("Scores", x)) ); //執行查詢 Console.WriteLine(studentsToXml);
輸出序列可能不包含源序列的任何元素或元素屬性。
輸出可能是通過將源元素用作輸入引數計算出的值的序列。
//資料來源 double[] radii = { 1, 2, 3 }; //建立查詢 var query = from radius in radii select $"{radius * radius * 3.14}"; //執行查詢 foreach (var i in query) { Console.WriteLine(i); }
到此這篇關於C#中Linq用法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45