使用LINQ的List集合where()方法查詢姓名以“S”開頭的學生列表的C#程式


介紹

本文將學習如何編寫一個C#程式,使用LINQ的List集合where()方法查詢姓名以'S'開頭的學生列表。

語言整合查詢,即LINQ,用於在C#語言中生成查詢。以前我們必須使用其他關係語言,如SQL和XML。它為C#語言或任何其他.NET語言提供了更強大的功能。在LINQ中用於查詢資料庫的語法與查詢儲存在陣列中的資料相同。

在我們繼續學習C#程式的演算法和程式碼之前,該程式使用LINQ的where()方法和List集合查詢姓名以'S'開頭的學生列表,讓我們先回顧一下LINQ的簡寫。

語言整合查詢 (LINQ)

LINQ是.NET框架的一部分,它使使用者能夠以型別安全的方式更輕鬆地檢索資料。這是在.NET 3.5版本中引入的。

LINQ最好的特性是它提供了一種單一方法來訪問來自多個數據源的資料,包括資料庫和XML文件。藉助LINQ,使用者可以編寫更容易理解、更簡潔、更美觀的程式碼。它還提供其他功能,例如過濾、排序、分組資料甚至更改資料。

現在,是時候介紹一下where()方法,也稱為Enumerable.Where()方法,它屬於System.Linq名稱空間。

Where<TSource>(IEnumerable<TSources>,Func<T Source,Boolean>)

此方法屬於System.Linq名稱空間。它根據謂詞過濾值序列。讓我們看看它的定義語法:

public static System.Collections.Generic.IEnumerable<TSource> Where<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);

此方法具有型別引數TSource,它說明源元素的型別。另外兩個引數是源(一個要過濾的IEnumerable<T>)和謂詞(一個函式,用於測試每個元素是否滿足條件)。

這是一個返回方法,它返回輸入序列中滿足條件的項的集合,表示為IEnumerable<T>。當謂詞或源為null時,可能會丟擲ArgumentNullException異常。

我們將使用一個問題陳述,這將使理解where()方法的概念變得非常容易。

在一所學校裡,有一個國際象棋隊,由來自不同班級的5名成員組成:Ankit、Abhinay、Shubham、Shreyank、Shahnawaz。他們學習不同的課程。將提供帶有'S'首字母的運動夾克。為了知道姓名以'S'開頭的學生姓名,校長要求你編寫一個程式來選擇姓名以'S'開頭的學生姓名。

在下一節中,我們將討論編寫C#程式的演算法,該程式使用LINQ的where()方法和List集合查詢姓名以'S'開頭的學生列表。

演算法

使用where()方法編寫程式程式碼時,需要遵循以下步驟。

步驟1 - 請記住宣告使用where()方法的正確名稱空間,即System.Linq。

步驟2 - 開始類程式碼並宣告三個變數來儲存學生的學號、班級和姓名。

步驟3 - 在下一步中,我們建立字串方法,該方法返回學生的學號、姓名和年級。

步驟4 - 在main()部分,我們宣告列表變數,然後將資料新增到列表中。

步驟5 - 現在我們使用where()方法根據使用者提供的謂詞過濾所需資訊。

步驟6 - 在此步驟中,我們顯示獲取的詳細資訊並結束程式。

示例

讓我們用一個例子來討論這個問題。

using System.Linq;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
class Student{

   // Three variables to store roll number, class, and name of the student
   int roll;
   int std;
   string name;
   // Creating the string method which returns roll number, name, and standard of student
   public override string ToString(){
      return roll + " " + name + " " + std;
   }
   static void Main(string[] args){

      // Declaring a list variable
      List<Student> student = new List<Student>(){

         // Details of students of the chess team
         new Student{ roll = 21, name = "Ankit", std = 10 },
         new Student{ roll = 12, name = "Abhinay", std = 10 },
         new Student{ roll = 07, name = "Shubham", std = 11 },
         new Student{ roll = 14, name = "Shreyank", std = 12 },
         new Student{ roll = 10, name = "Shanawaz", std = 11 }

      };
      
      // Using the Where() function we search through the student details
      IEnumerable<Student> Query = student.Where(s => s.name[0] == 'S');

      // Displaying the student details
      Console.WriteLine("Roll Name Standard");
      Console.WriteLine("- - - - - - - - - - - - - - - - - ");
      foreach (Student e in Query) {

         // Call the to string method
         Console.WriteLine(e.ToString());
      }
   }
} 

輸出

Roll Name Standard
- - - - - - - - - - - - - - - - -
07 Shubham 11
14 Shreyank 12
10 Shanawaz 11 

時間複雜度

where()方法的時間複雜度是常數,在大O表示法中可以稱為O(1)。因此,整個程式碼的時間複雜度為O(1)。

結論

在本文中,我們討論了使用LINQ的List集合where()方法查詢姓名以'S'開頭的學生列表的C#程式。我們理解了where()方法。然後我們理解了演算法,最後我們學習了程式碼。然後我們瞭解了程式碼的時間複雜度。

我們希望本文能幫助你提高對C#的瞭解。

更新於:2023年3月31日

366 次瀏覽

啟動你的職業生涯

完成課程後獲得認證

開始學習
廣告