1. 程式人生 > 程式設計 >C# LINQ的基本使用方法示例

C# LINQ的基本使用方法示例

LINQ是什麼?

LINQ是Language Integrated Query(語言整合查詢的縮寫),微軟官方 對其的描述:

語言整合查詢 (LINQ) 是一系列直接將查詢功能整合到 C# 語言的技術統稱。

基本用法是什麼?

(我目前也只會最基本的用法。。)

LINQ查詢操作由三個不同的操作組成:

  1. 獲取資料來源
  2. 建立查詢
  3. 執行查詢

下面我將用我學習時用的一個小例子來演示。

有兩個資料來源:武林高手的集合和武林絕學的集合。

我用的是兩個集合,實際上不只是集合可以作為資料來源

微軟官方文件提到:

上例中,資料來源是一個數組,因此它隱式支援泛型IEnumerable<T> 介面。 這一事實意味著該資料來源可以用 LINQ 進行查詢。

說回我的例子,我實現了兩個類:

MatialArtsMaster 表示武林高手:

//武林高手
class MatialArtsMaster
{ 
 public int ID { get; set; }
 public string Name { get; set; }
 public int Age { get; set; }
 public string Menpai { get; set; }
 public string Kongfu { get; set; }
 public int Level { get; set; }
 public override string ToString()
 {
  return string.Format("id:{0},name:{1},age:{2},menpai:{3},kongfu:{4},level:{5}",this.ID,this.Name,this.Age,this.Menpai,this.Kongfu,this.Level);
 }
}

Kongfu 表示武林絕學:

//武學
class Kongfu
{
 public int Id { get; set; }
 public string Name { get; set; }
 public int Power { get; set; }
 public Kongfu() { }
 public Kongfu(int id,string name,int power)
 {
  Id = id;
  Name = name;
  Power = power;
 }
 public override string ToString()
 {
  return string.Format("Id:{0},Name:{1},Power:{2}",this.Id,this.Power);
 }
}

然後填充兩個集合:

{
   var MasterList = new List<MatialArtsMaster>
   {
    new MatialArtsMaster(){ID=001,Name="黃蓉",Age=18,Menpai="丐幫",Kongfu="打狗棒法",Level=9},new MatialArtsMaster(){ID=002,Name="洪七公",Age=70,Level=10},new MatialArtsMaster(){ID=003,Name="郭靖",Age=22,Kongfu="降龍十八掌",new MatialArtsMaster(){ID=004,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花寶典",Level=1},new MatialArtsMaster(){ID=005,Name="東方不敗",Age=35,new MatialArtsMaster(){ID=006,Name="林平之",Age=23,Menpai="華山",Level=7},new MatialArtsMaster(){ID=007,Name="嶽不群",Kongfu="嶽不群",Level=8},new MatialArtsMaster(){ID=008,Name="令狐沖",Kongfu="獨孤九劍",new MatialArtsMaster(){ID=009,Name="梅超風",Menpai="梅花島",Kongfu="九陰真經",};
   var kungfuList = new List<Kongfu>()
   {
    new Kongfu(){Id=1,Name="打狗棒法",Power=90},new Kongfu(){Id=2,Name="降龍十八掌",Power=95},new Kongfu(){Id=3,Name="葵花寶典",Power=100},new Kongfu(){Id=4,Name="獨孤九劍",new Kongfu(){Id=5,Name="九陰真經",};

接下來就是查詢了,基本的LINQ查詢操作主要通過 from,in,select,where 關鍵字實現。例如:

查詢修煉 葵花寶典 的武林高手:

var res = from master in MasterList
     where master.Kongfu == "葵花寶典"
     select master;
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //id: 4,name: 任我行,age: 50,menpai: 明教,kongfu: 葵花寶典,level: 1
  //id: 5,name: 東方不敗,age: 35,level: 10
  //id: 6,name: 林平之,age: 23,menpai: 華山,level: 7

查詢所有武林高手的名字:

var res = from master in MasterList
     select master.Name;
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //黃蓉
  //洪七公
  //郭靖
  //任我行
  //東方不敗
  //林平之
  //嶽不群
  //令狐沖
  //梅超風

微軟官方將 from 關鍵字後的那個變數稱為 範圍變數 :

範圍變數就像 foreach 迴圈中的迭代變數,但查詢表示式中不會真正發生迭代。 當執行查詢時,範圍變數將充當對 customers 中每個連續的元素的引用。

這種寫法寫起來和SQL語句十分相似,邏輯功能也基本上一樣,所以如果已經會SQL的話會很容易理解。

擴充套件方法

除了這樣的標準寫法,還可以通過資料來源的擴充套件方法來實現LINQ查詢。最簡單易懂的一個方法是 where() 方法。

如要查詢所有修煉等級大於8的武林高手:

var res = MasterList.Where(master => master.Level > 8);
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //id: 1,name: 黃蓉,age: 18,menpai: 丐幫,kongfu: 打狗棒法,level: 9
  //id: 2,name: 洪七公,age: 70,level: 10
  //id: 3,name: 郭靖,age: 22,kongfu: 降龍十八掌,level: 10
  //id: 5,level: 10
  //id: 8,name: 令狐沖,kongfu: 獨孤九劍,level: 10

擴充套件方法還有很多,如 Select 、 SelectMany 、 Join 和 Orderby 。他們的具體用法可參閱微軟官方文件-擴充套件方法

)。

最後

LINQ是一項強大的技術,我才瞭解了一點點LINQ的知識(甚至可能還有錯誤,如果有請一定指正!),保持學習才是長久之道。

總結

到此這篇關於C# LINQ的基本使用方法的文章就介紹到這了,更多相關C# LINQ基本用法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!