程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中Linq延遲查詢的例子

C#中Linq延遲查詢的例子

編輯:C#入門知識

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)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved