一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - c#中LINQ的基本用法實例

c#中LINQ的基本用法實例

2022-03-09 13:30阡陌染 C#

語言集成查詢 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一項創新功能。下面這篇文章主要給大家介紹了關于c#中LINQ的基本用法,需要的朋友可以參考借鑒,下面來一起看看吧

一、什么是LINQ

LINQ(讀音link)代表語言集成查詢(Language Integrated Query),是.NEt框架的擴展,它允許我們用SQL查詢數據庫的方式來查詢數據的集合,使用它,你可以從數據庫、程序對象的集合以及XML文檔中查詢數據

下面一個簡單的示例,可以查詢數組中小于8的數字并輸出。

一般步驟:獲取數據源、創建查詢、執行查詢。需要注意的是,盡管查詢在語句中定義,但直到最后的foreach語句請求其結果的時候才會執行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace LINK查詢
{
 class Program
 {
 static void Main(string[] args)
 {
  int[] number = { 2, 4, 6, 8, 10 }; //獲取數據源
  IEnumerable<int> lowNum = from n in number //創建并存儲查詢,不會執行操作
     where n < 8
     select n;
 
  foreach(var val in lowNum) //執行查詢
  {
  Console.Write("{0} ", val);
  }
 
  Console.ReadKey();
 }
 }
}

二、查詢表達式的結構

查詢表達式由查詢體后的from子句組成,其子句必須按一定的順序出現,并且from子句和select子句這兩部分是必須的。先介紹一下子句

2.1 from子句

from子句指定了要作為數據源使用的數據集合,它的語法是:

?
1
from Type Item in Items

其中Type是集合中元素的類型,是可選的,因為編譯器可以從集合來推斷類型。  Item是迭代變量的名字。  Items是要查詢的集合的名字,必須是可枚舉類型的

它和foreach比較相似,但foreach語句在遇到代碼時就執行其主體,二from子句什么也不執行。它創建可以執行的后臺代碼對象,只有在程序的控制流遇到訪問查詢變量的語句時才會執行

2.2  join子句

如果您對SQL中的join比較熟悉的話,那么LINQ中的join對你來說也不是什么難事,不熟悉的話,,當我沒說。

我們可以使用join來結合兩個或更多集合中的數據,它接受兩個集合然后創建一個臨時的對象集合

?
1
2
var query = from s in students
  join c in course on s.SID equals c.SID

equals用于比較相等性的字段,不能使用“==”代替,下面示例中有三個學生和三門課程,我們要做的是查找選修了歷史課的學生名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace LINK查詢
{
 class Program
 {
 public class Student //聲明student類
 {
  public int stId; //學生ID
  public string stuName; //學生姓名
 }
 
 public class Course //聲明course類
 {
  public int stId; //學生ID
  public string courseName; //課程名
 }
 
 static Student[] students = new Student[]
 {
  new Student {stId = 1,stuName = "jack"},
  new Student {stId = 2,stuName = "taylor"},
  new Student {stId = 3,stuName = "fleming"}
 };
 
 static Course[] courses = new Course[]
 {
  new Course{stId = 1,courseName = "art"},
  new Course{stId = 2, courseName = "art"},
  new Course{stId = 1,courseName = "history"},
  new Course{stId = 3, courseName = "history"},
  new Course{stId = 3,courseName = "physics"},
 };
 
 static void Main(string[] args)
 {
  //查詢所有選修了history課的學生名
  var query = from s in students
   join c in courses on s.stId equals c.stId
   where c.courseName == "history"
   select s.stuName;
 
  foreach(string str in query)
  {
  Console.Write("{0} ", str);
  }
  Console.ReadKey();
 }
 }
}

輸出 jack fleming

講解一下查詢過程:它會依次使用student中的對象與course中的所有對象進行對比,查找是否符合 s.stId equals c.stId where c.courseName == "history" 要求。

 

stID stuName
1 jack
2 taylor
3 fleming

 

 

 

 stID  courseName
 1  art
 2  art
 1  history
 3  history
 3  physics

 

即先將(1,jack)和(1,art),(2,art)...(3,physics)分別匹配,然后再(2,taylor)和(1,art),(2,art)...(3,physics),直到所有都匹配完,最終可以找到兩條可以匹配的結果

2.3 let子句

let子句接受一個表達式的運算并且把它賦值給一個需要在其他運算中使用的標識符,它是from...let...where片段中的一部分

?
1
2
3
4
5
var query = from a in groupA
   from b in groupB
   let sum = a + b
   where sum < 12
   select new(a,b,sum);

2.4 where子句

where子句根據之后的運算來除去不符合要求的項,一個查詢表達式可以有任意多個where子句,一個項必須滿足所有的where條件才能避免被過濾,其語法為

?
1
2
where BoolenExpression1
where BoolenExpression2

前面的例子已經多次用過where,這里就不舉例了

2.5 orderby子句

orderby可以很方便的將返回的數據進行排序,可選ascending和descending兩種方式,默認的是ascending

語法: orderby Expression ascending or descending 二選一

為join子句中的例子增加一個orderby子句,返回結果就變成了 fleming jack

?
1
2
3
4
5
var query = from s in students
      join c in courses on s.stId equals c.stId
      where c.courseName == "history"
               orderby s.stuName  //排序
      select s.stuName;

2.6 group子句

group子句可以讓你把select的結果按指定的鍵(key)進行分組 ,每一個分組由一個叫做鍵的字段區分,分組本身是可枚舉類型的并且可以枚舉它的項

?
1
2
3
4
5
6
7
8
9
10
11
var query = from student in students
   group student by student.major;
 
   foreach (var s in query)
   {
    Console.WriteLine("{0}", s.key);
    foreach (var t in s)
    {
     console.writeLine(" {0}", t.Name);
    }
   }

2.7 select子句

select子句指定所選定的對象哪部分應該被選擇。可以指定下面的任意一項

a: 整個數據項

b: 數據項的一個字段

c: 數據項中幾個字段組成的新對象(或類似其他值)

?
1
2
3
4
5
6
7
8
9
10
11
var query = from s in students
      select s; //整個數據項
 
   var query = from s in students
      select s.stuName; //s中的一個字段
 
   var query = from a in groupA
      from b in groupB
      let sum = a + b
      where sum < 12
      select new (a, b, sum);  //a,b,sum組成的新字段

2.8 查詢延續: into子句

查詢延續子句可以接受查詢的一部分結構并賦予一個名字,從而可以在查詢的另一部分中使用

?
1
2
3
4
5
var someInt = from a in groupA
    from b in groupB
    into groupAandB
    from c in groupAandB
    select c;

三、方法語法和查詢語法

在使用LINQ寫查詢時可以使用兩種形式的語法:查詢語法和方法語法

  a:方法語法(method syntax) : 使用標準的方法調用,這些方法是一組叫做標準查詢運算符的方法

  b:查詢語法(query method) : 看上去和SQL語句很相似,使用查詢表達式形式書寫。微軟推薦使用查詢語法,因為它更易讀

在編譯時,CLR會將查詢語法轉換為方法語法

?
1
2
3
4
5
6
7
int[] num = { 2, 4, 6, 8, 10 };
 
 var numQuery = from number in num //查詢語法
    where number < 8
    select number;
 
 var numMethod = num.Where(x => x < 8); //方法語法

它們得到的結果是一樣的。方法語法中where的參數使用了Lambda表達式

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/forever-Ys/p/10322130.html

延伸 · 閱讀

精彩推薦
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
主站蜘蛛池模板: 亚洲图片一区二区 | 日本老师动漫 | 国产精品久久毛片蜜月 | 日本人成年视频在线观看 | nxgx国产 | 日日碰碰| 亚洲一区二区三区福利在线 | 99久久精品国语对白 | 禁忌第一季第3季 | 午夜宅男宅女看在线观看 | 精品日韩欧美一区二区三区 | 精品午夜寂寞黄网站在线 | 九九精品免视频国产成人 | 99re最新网址 | 国产v在线在线观看羞羞答答 | 免费在线中文字幕 | 日本高清中文字幕 | 国产66 | 亚洲aⅴ男人的天堂在线观看 | 亚洲国产成人精品激情 | 亚洲精品国产AV成人毛片 | 国产免费专区 | 国产一级毛片潘金莲的奶头 | 深夜视频在线播放 | chinaspanking调教 chanelpreston欧美网站 | 亚洲欧美另类综合 | 亚洲图片 自拍偷拍 | 国产尤物视频 | 欧美又大又粗又爽视频 | 亚洲国产精品久久久久久网站 | 日本小网站| 2020国语对白露脸 | 99国产精品热久久久久久夜夜嗨 | 7777奇米四色 | 亚洲国产一区 | 亚洲天堂在线视频观看 | 国产亚洲一区二区三区 | 亚洲黄色大片 | 亚洲欧美韩国日产综合在线 | 日韩欧美亚洲每日更新网 | 四缺一小说 |