亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Linq常用查詢運算符

2019-11-14 13:38:09
字體:
來源:轉載
供稿:網友

  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 Product15 {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.11 GroupBy:在SQL中,group by只能跟聚合函數一起搭配使用,但在linq中,groupby出來的東西可以是一個樹形結構

 1 List<Product> list = new List<Product>() 2 { 3     new Product() {Index = 1,Value = 1}, 4     new Product() {Index = 2,Value = 2}, 5     new Product() {Index = 2,Value = 3}, 6     new Product() {Index = 3,Value = 3}, 7     new Product() {Index = 4,Value = 5}, 8 }; 9 10 var query2 = list.GroupBy(p => p.Index).ToList();11 12 foreach (var item in query2)13 {14     Console.Write(item.Key+"-");15     foreach (var product in item)16     {17         Console.Write(product.Value);18         Console.WriteLine( );19     }20 }   //輸出   1-1  2-2 3   3-3  4-5        

 

  1.12 Intersect(),Except():Intersect是返回兩個序列中相同元素構成的序列,Except則相反

1 int[] arr1 = {1, 2, 3};2 int[] arr2 = { 2, 5, 6 };3 var query2 = arr1.Intersect(arr2); //輸出  2

 

  1.13  Concat(),Union():concat用于連接兩個序列,union也是連接兩個序列,但是會剔除相同的項目

 

  1.14 Zip():將兩個序列中index相同的元素,組成一個新的元素,長度以短的為準

1 int[] arr = {1, 2, 3, 4};2 string[] arr2 = {"", "", "", "", ""};3 var query = arr.Zip(arr2, (x, y) => string.Format("{0},{1}", x, y));4 //輸出  1,一  2,二   3,三  4,四

 

 2.返回其他序列類型

  ToArray,ToList,ToDictionary,ToLookUp這幾個都是將IEnumerable<T>轉換成相應類型,就跟平常Tolist一樣,沒有延遲加載,立即返回。

 3.返回序列中的元素

  3.1   ElementAt(),ElementAtOrDefault():ElementAt(index)返回下標值為index的元素,不存在的話拋出異常,用ElementAtOrDefault這個返回該類型的默認值來解決異常情況

  3.2   First(),FirstOrDefault():First 返回滿足條件的第一個序列元素,不存在的話拋出異常,用FirstOrDefault這個返回該類型的默認值來解決異常情況

  3.3   Last(),LastOrDefault():Last返回滿足條件的最后一個序列元素,不存在的話拋出異常,用LastOrDefault這個返回該類型的默認值來解決異常情況

  3.4   Single(),SingleOrDefault():Single跟上面幾個有點不一樣的地方,它要求序列中有且僅有一個滿足條件的項,當大于一項的時候,會拋出異常。SingleOrDefault用于當查詢結果為0項時,返回類型默認值。

 4.返回標量值

  4.1  Count(),LongCount(),Max(),Min(),Average(),Sum():這幾個估計大家都非常熟悉了,憑借字面意思就能知道大概了,我們直接來看例子:

 1 int[] arr = {1, 2, 3, 4}; 2 int query1 = arr.Count(); 3 Console.WriteLine(query1);  //輸出 4 4  5 int query2 = arr.Max(); 6 Console.WriteLine(query2);//輸出 4 7  8 int query3 = arr.Min(); 9 Console.WriteLine(query3); //輸出 110 11 double query4 = arr.Average();12 Console.WriteLine(query4); //輸出 2.513 14 int sum = arr.Sum();15 Console.WriteLine(sum);//輸出 10

 

  4.2  Aggregate():返回自定義的聚合,例如每個元素乘2,再相加

1 int sum2 = arr.Aggregate(0, (total, x) => total + (x*2));2 Console.WriteLine(  sum2);//輸出20

 

  4.3  Contains(),Any(),All(),SequenceEqual()

      Contains:判斷某一元素是否在存在序列中

      Any:判斷序列中是否存在滿足表達式的元素,只要有一個元素滿足,返回True。我們經常會判斷某一list不為空時,用list.count!=0,這樣是比較浪費性能因為會去統計該list全部個數,當我們用any的時候,只要判斷第一個元素即可

      All:判斷序列中是否全部元素都滿足表達式,只要一個不滿足,則返回fasle

      SequenceEqual:用于逐項比較兩個序列,當兩個序列中元素數目相同,并且元素位置一樣,則返回true,否則false

 

 完結

  感謝大家觀看,祝大家2016年快樂!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品理论片| 欧美电影免费观看高清| 国产精品久久久久久久av电影| 亚洲www在线| 日韩精品视频免费| 久久精品国产清自在天天线| 亚洲美女黄色片| 日韩精品中文字| 亚洲影院污污.| 国产日韩欧美在线看| 亚洲欧美三级伦理| 国产日韩中文字幕在线| 992tv成人免费视频| 成人性生交xxxxx网站| 亚洲男人第一av网站| 91精品视频播放| 中文字幕久久精品| 欧美成人国产va精品日本一级| 亚洲jizzjizz日本少妇| 国模吧一区二区三区| 久久久久久久久久久亚洲| 日韩成人在线视频观看| 久久久精品亚洲| 91中文字幕一区| 久久久精品中文字幕| 中文字幕日韩电影| 日韩专区在线观看| 亚洲欧美国产高清va在线播| 国产精品一二区| 欧美性xxxxxxxxx| 久久久免费精品视频| 久久综合免费视频影院| 丝袜亚洲另类欧美重口| 欧美日韩国产一区在线| 伦伦影院午夜日韩欧美限制| 日韩av色综合| 精品久久久久久电影| 欧美电影免费看| 38少妇精品导航| 亚洲成av人影院在线观看| 亚洲电影天堂av| 欧洲永久精品大片ww免费漫画| 亚洲精品国偷自产在线99热| 久久久久九九九九| 国产精品18久久久久久首页狼| 日韩精品福利在线| 欧美日韩在线观看视频| 久久久久久网址| 久久综合久久88| 成人亚洲激情网| 国产精品免费观看在线| 91中文字幕在线观看| 亚洲bt欧美bt日本bt| 日本精品久久中文字幕佐佐木| 欧美另类第一页| 国产精品∨欧美精品v日韩精品| 欧美多人乱p欧美4p久久| 亚洲欧美在线免费观看| 国产精品中文字幕久久久| 国产v综合ⅴ日韩v欧美大片| 亚洲欧洲自拍偷拍| 亚洲91精品在线观看| 久久久久久久久久国产精品| 中文字幕无线精品亚洲乱码一区| 九九综合九九综合| 91精品中国老女人| 91精品国产综合久久久久久久久| 精品久久久久久中文字幕一区奶水| 国产精品午夜视频| 国产福利视频一区| 欧美成人黑人xx视频免费观看| 青青久久av北条麻妃海外网| 欧美午夜精品伦理| 97**国产露脸精品国产| 欧美国产第一页| 亚洲美女动态图120秒| 亚洲精品综合久久中文字幕| 国内免费精品永久在线视频| 亚洲欧洲中文天堂| 久久精品99无色码中文字幕| 亚洲精品日韩丝袜精品| 色阁综合伊人av| 欧美日韩一区二区三区在线免费观看| 国产精品成人一区二区| 欧美电影免费观看网站| 中文字幕精品www乱入免费视频| 91精品久久久久久综合乱菊| 国产精品视频成人| 最近2019免费中文字幕视频三| 欧美成年人网站| 欧美视频不卡中文| 国产免费久久av| 亚洲欧美国产va在线影院| 中文字幕国产亚洲| 国产日韩欧美影视| 久久视频在线看| 91九色视频导航| 91精品国产免费久久久久久| 亚洲色图第一页| 中文字幕精品—区二区| 日韩欧美国产激情| 国产精品偷伦免费视频观看的| 亚洲欧美三级在线| 国产精品一二三在线| 久久99久久亚洲国产| 亚洲精品日韩丝袜精品| 国产主播喷水一区二区| 中文字幕国产亚洲2019| 欧美国产精品人人做人人爱| 国产精品久久久亚洲| 91久久国产婷婷一区二区| 国产丝袜视频一区| 欧美壮男野外gaytube| 久久久日本电影| 欧美高清视频一区二区| 国产精品成人品| 91av在线不卡| 亚洲的天堂在线中文字幕| 亚洲精品按摩视频| 亚洲精品99久久久久中文字幕| 日韩大片在线观看视频| 91a在线视频| 欧美日韩一区二区免费在线观看| 久久艳片www.17c.com| 国产色婷婷国产综合在线理论片a| 懂色av中文一区二区三区天美| 3344国产精品免费看| 久久综合免费视频影院| 奇门遁甲1982国语版免费观看高清| 国产精品久久久久久超碰| 亚洲一区二区少妇| 欧美最猛性xxxxx(亚洲精品)| 国产日产欧美a一级在线| 国产一区二区视频在线观看| 原创国产精品91| 在线播放日韩精品| 日本午夜在线亚洲.国产| 日韩av中文字幕在线| 国产精品极品尤物在线观看| 国产成人拍精品视频午夜网站| 日本免费一区二区三区视频观看| 欧美国产一区二区三区| 国产精品丝袜白浆摸在线| 日本精品一区二区三区在线播放视频| 中文字幕免费精品一区| 国产精品亚洲欧美导航| 日韩黄色在线免费观看| 国产精品9999| 激情亚洲一区二区三区四区| 国产精品色婷婷视频| 亚洲成人在线视频播放| 亚洲级视频在线观看免费1级| 亚洲精品少妇网址| 国产丝袜视频一区| 欧美精品video| www.国产一区| 亚洲精品日产aⅴ| 欧美中文字幕在线| 日韩av电影在线免费播放| 久久精品夜夜夜夜夜久久| 亚洲精品福利在线| 国产精品揄拍500视频| 亚洲视频免费一区| 美女av一区二区三区|