C#中Linq延遲查詢的例子。本站提示廣大學習愛好者:(C#中Linq延遲查詢的例子)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中Linq延遲查詢的例子正文
提出成績
上面所給代碼編譯時正常,然則履行時會失足,請指出法式在履行時可以或許履行到編號為(1)(2)(3)的代碼行中的哪一行。
using System; using System.Collections.Generic; using System.Linq; namespace DeferredExecutionExp { class Program { static void Main(string[] args) { List<Student> studentList = new List<Student>() { new Student(){Id =1, Name="ZhangSan", Age=20}, new Student(){Id =2, Name=null, Age=21}, new Student(){Id =3, Name="Lisi", Age=22} }; var queryedStudentList = studentList.Where(it => it.Name.Trim() != "ZhangSan");//(1) if (queryedStudentList.Count() > 0)//(2) { foreach (var student in queryedStudentList)//(3) { Console.WriteLine(student.Name); } } } } public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } }
成績剖析
其實,發明成績其實不難,很明顯在履行代碼“it => it.Name.Trim()”時會失足,由於聚集studentList中第二個先生的Name屬性為null,當遍歷到該先生時,對其Name屬性履行Trim操作,不失足才怪呢。既然在這裡會失足,那末法式確定是履行到該行就GameOver了呀。然則現實情形又會是如許嗎?
著手驗證
單步驟試法式,發明:履行到代碼行(1)時,法式並沒有失足,而是在履行代碼行(2)時,法式才湧現了異常,檢查異常信息,卻提醒的是在履行代碼行(1)時有成績,為何會如許呢?為何履行到代碼行(2)時還會去履行代碼行(1)呢?這全都是由於Linq的延遲查詢招致的。
延遲查詢
延遲查詢的意思是說:在運轉時代界說查詢表達式時,查詢不會履行,只要到迭代數據項時查詢才會被履行。本例中的代碼行(1)只是界說了查詢,而代碼行(2)中當挪用Count辦法時便會遍歷數據項,這時候便會履行查詢,也就是說會去履行代碼行(1)界說的查詢,終究招致了本例中這類景象的湧現。
所以,本例中的代碼終究可以或許履行到的代碼行是(2)。