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

Linq常用查詢運算符,Linq常用運算符

編輯:C#入門知識

Linq常用查詢運算符,Linq常用運算符


  Linq一共包含五十幾個查詢運算符,常用的根據類型來區分一共有5類左右,這五類裡面一些事在項目查詢中經常用到的。不過linq運算符的命名十分規范,基本從字面意思就能猜測出來是干嘛用的,下面我們挑選一些常用的來介紹一下。根據分類我們能分成下面4種類型:

 

1.返回IEnumerable<T>類型的

  1.1  Where:主要用於對於序列的篩選,跟在sql中對數據篩選用法是一樣的

1 int[] array = { 1, 3, 5, 7, 2 };
2 var query = array.Where(p => p >= 2); //輸出 3,5,7,2

 

  1.2  OfType:這個也用於篩選數據,跟where不同之處在於是對某一類型的數據篩選,根據指定類型對IEnumerable元素的篩選

1 List<object> list = new List<object>();
2 list.Add("Power");
3 list.Add(1);
4 list.Add(DateTime.Now);  
5 var query = list.OfType<string>().Where(p => p.StartsWith("P")); //輸出   Power 

 

  1.3  Cast:定義在IEnumerable上,用於將非泛型的序列轉成泛型序列,當轉換不成功的時候,則會拋出異常

1 ArrayList al = new ArrayList(); 
2 al.Add(100); 
3 al.Add(200);
4 al.Add("df"); //拋出System.InvalidCastException異常

 

  1.4  OrderBy,ThenBy,OrderByDescending,ThenByDescending:這幾個就是排序,排序,排序。唯一要注意的事情是ThenBy是在IOrderedEnumerable<T>上面定義的拓展方法,因為不能直接在IEnumerable<T>上調用,ThenBy的調用只能排在OrderBy之後

1 List<Product> list2 = new List<Product>();
2 list2.Add(new Product() {Index = 1,value = 2});
3 list2.Add(new Product() { Index = 12 value = 22 });
4 list2.OrderBy(p => p.Index).ThenBy(p => p.value);

 

  1.5  Select:實現了投影操作,可以在其內對對象類型進行轉換。例如在select出來的對象中,將其轉換成我們所需要的類型

1 list2.Select(p=>new Product {Index = p.Index});//新建了一個product對象

  

  1.6  Take,Skip:skip是跳過幾個元素,take是取幾個元素,這兩個東西用於分頁,例如我們想跳過前面十行的數據,取後面十行的數據

1 var q = list.Skip(10).Take(10);

  

  1.7  TakeWhile(),SkipWhile():    

    TakeWhile在遇到不符合條件的元素的時候返回前面找到符合條件的元素

1 int[] arr = {1, 4, 8, 2, 3,1};
2 var query1 = arr.TakeWhile(x => x <= 3); //輸出 1 

    SkipWhile會一直跳過符合條件的元素,直到遇到第一個不符合條件的元素,然後取該元素後面的所有元素

1 var query2 = arr.SkipWhile(x => x <= 3);//輸出  4  8 2 3 1

  

  1.8  Reverse()用於將序列中的元素逆序排列

 

  1.9  DefaultIfEmpty()當序列為空的時候,DefaultIfEmpty會添加一個默認值或者指定值,這個在做left join或right join中比較好用,當為空值的時候,我們可以指定他的值

1 int[] arr = {};
2 var query2 = arr.DefaultIfEmpty();//輸出  0

 

  1.10 Distinct()主要用於去重復序列

1 int[] arr = {1, 2, 3, 3};
2 var query2 = arr.Distinct();
3 query2.ToList().ForEach(p=> Console.Write(p));//輸出 1  2  3 

  Int類型能夠實現去重復的原因是Int類型繼承了IComparable,當假如我們想對一個類的一個字段進行去重復,我們可以調用Distinct的一個重載方法,傳遞繼承於IEqualityComparer<T>的Class

 1 public class ProductComparer:IEqualityComparer<Product>
 2 {
 3   public bool Equals(Product a, Product b)
 4    {
 5      return a.Index == b.Index;
 6    }
 7 
 8    public int GetHashCode(Product obj)
 9    {
10      return obj.Index;
11    }
12 }
13 
14 public class Product
15 {
16    public int Index { get; set; }
17 }
18 
19  
20 
21 Product[] array = new[]{
23                 new Product() {Index = 1},
24                 new Product() {Index = 2},
25                 new Product() {Index = 2},
26                 new Product() {Index = 3}
27             };
28  
29 
30 ProductComparer pc = new ProductComparer();
31 var query2 = array.Distinct(pc); //輸出  1   2   3

 

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