国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

21.C#序列過慮、排序、let子句和連接(十一章11.3-11.5)

2019-11-17 02:36:52
字體:
來源:轉載
供稿:網友

21.C#序列過慮、排序、let子句和連接(十一章11.3-11.5)

  哈哈,隔了一個星期,再怎么樣都要發一篇,要多看書啊,書不能停~~~

  • 使用where子句進行過慮

  where子句的語法格式如下:where 過慮表達式

  例子:新建一個珠寶類,如下:

 1 class Jewellery 2 { 3     /// <summary> 4     /// 珠寶類型 5     /// <list type="Ring">戒指</list> 6     /// <list type="Necklace">項鏈</list> 7     /// <list type="Bracelet">手鏈</list> 8     /// </summary> 9     public enum JewelleryType10     {11         Ring,12         Necklace,13         Bracelet14     }15     /// <summary>16     /// 當前珠寶狀態17     /// <list type="Stock">存貨</list>18     /// <list type="Repair">修理中</list>19     /// <list type="Sold">已售出</list>20     /// </summary>21     public enum JewelleryState22     {23         Stock,24         Repair,25         Sold26     }27     public JewelleryType Type { get; set; }28     public double PRice { get; set; }29     public JewelleryState State { get; set; }30 }

  再我們使用一個List來做容器,通過LINQ來過慮。

 1 List<Jewellery> list = new List<Jewellery>() 2 { 3     new Jewellery() {Type=Jewellery.JewelleryType.Bracelet,State=Jewellery.JewelleryState.Repair,Price=100 }, 4     new Jewellery() {Type=Jewellery.JewelleryType.Necklace,State=Jewellery.JewelleryState.Sold,Price=200 }, 5     new Jewellery() {Type=Jewellery.JewelleryType.Ring,State=Jewellery.JewelleryState.Stock,Price=300 }, 6     new Jewellery() {Type=Jewellery.JewelleryType.Necklace,State=Jewellery.JewelleryState.Sold,Price=400 }, 7     new Jewellery() {Type=Jewellery.JewelleryType.Bracelet,State=Jewellery.JewelleryState.Stock,Price=500 }, 8     new Jewellery() {Type=Jewellery.JewelleryType.Ring,State=Jewellery.JewelleryState.Repair,Price=600 } 9 };10 11 //查找價格大于300的手鏈12 var result = from item in list13              where item.Price > 300 && item.Type == Jewellery.JewelleryType.Bracelet14              select item;15 //轉換為list.Where(item => item.Price > 300).Where(item => item.Type == Jewellery.JewelleryType.Bracelet);16 Console.WriteLine(result.Count());17 18 //記錄當前正在修理中的珠寶總值19 var result1 = (from item in list20                where item.State == Jewellery.JewelleryState.Repair21                select item).Sum(item => item.Price);22 //轉換為list.Where(item => item.State == Jewellery.JewelleryState.Repair).Sum(item => item.Price);23 Console.WriteLine(result1);24 25 Console.ReadKey();
  • 退化的查詢表達式
1 var resutl2 = from item in list2               select item;3 //這個就是所謂的退化表達式,編譯器會故意生成一個對Select方法的調用,即使它什么都沒有做,但result2和list有很大的不同,4 //兩個序列返回的數據是相同的,但是Select方法的結果只是數據項的序列,而不是數據源本身。查詢表達式的結果和源數據永遠不會是同一個對象5 //當有其它的操作的時候,就不用為編譯器保留一個"空操作"Select子句
  • 使用orderby子句進行排序
1 //按價格排序,從大到小2 var resutl3 = from item in list3               orderby item.Price descending4               select item;5 //轉換為list.OrderByDescending(item => item.Price);
1 //先用價格再按狀態排序2 var result4 = from item in list3               orderby item.Price, item.State4               select item;
  • let子句

  let子句只不過引入一個新的范圍變量,它的值是基于其它范圍變量,語法格式:let 標識符 = 表達式

1 //貨品是用RMB的,現在使用HK來記錄,使用投影返回匿名對象的序列2 var result5 = from item in list3               let hk = item.Price / 0.84               select new { hk = hk, item = item };

  let操作符對一個表達式進行求值,并引入新的范圍變量

  • 連接

  相應于數據庫中的概念,使用兩張表,這里是使用兩個序列,通過匹配兩者之間的數據行來創建結果。

  1. 使用join子句的內連接

  內連接涉及兩個序列。一個鍵選擇器表達式應用于第1個序列的每一個元素,另外一個鍵選擇器(可能完全不同)應用于第二個序列的每一個元素。連接的結果是一個包含所有配對元素的序列,配對的規則是第1個元素的鍵與第2個元素的鍵相同。

  連接的格式:join 右邊序列元素 in 右邊序列

        on 左邊序列元素的key equals 右邊序列元素的key

 1 /// <summary> 2 /// 用于存放珠寶的盒子 3 /// </summary> 4 class Box 5 { 6     /// <summary> 7     /// 盒子有一個珠寶類型的屬性,與要放的珠寶類型一致 8     /// </summary> 9     public Jewellery.JewelleryType jewelleryType { get; set; }10     public string BoxName { get; set; }11 }
1 //打印每個珠寶存放的盒子,珠寶的狀態要是存貨2 var result6 = from box in boxList3               join item in list4               on box.jewelleryType equals item.Type5               where item.State == Jewellery.JewelleryState.Stock6               select new { BoxName = box.BoxName, Price = item.Price };7 8 result6.ToList().ForEach(item => Console.WriteLine("位置:" + item.BoxName + ";" + "價格:" + item.Price));

  結果如下

  可見在box1中放了一件價格為500的珠寶,在box3中放著一個價格為300的珠寶。這里作為兩個序列的key的是珠寶的類型Jewellery.JewelleryType

  請斧正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密云县| 东明县| 永仁县| 平潭县| 抚顺市| 额尔古纳市| 彭泽县| 宜城市| 青浦区| 印江| 台前县| 道真| 左权县| 汕尾市| 科技| 固安县| 铜陵市| 化德县| 扶余县| 承德县| 城步| 略阳县| 子长县| 腾冲县| 普定县| 广水市| 洞口县| 滕州市| 长武县| 东丰县| 安宁市| 天门市| 蕉岭县| 澎湖县| 革吉县| 凤山县| 西宁市| 临澧县| 金阳县| 滨海县| 白河县|