1. 程式人生 > >Linq常用List操作總結,Foreach、分頁、交併集、去重、SelectMany等

Linq常用List操作總結,Foreach、分頁、交併集、去重、SelectMany等

  1. /* 
  2. 以下圍繞Person類實現,Person類只有Name和Age兩個屬性 
  3. 一.List<T>排序 
  4. 1.1 List<T>提供了很多排序方法,sort(),Orderby(),OrderByDescending(). 
  5. */
  6. lstPerson = lstPerson.OrderByDescending(x=>x.Name).ToList(); //降序
  7. lstPerson = lstPerson.OrderBy(x => x.Age).ToList();//升序
  8. //通過Name和Age升序
  9. lstPerson.Sort((x, y) =>  
  10.             {  
  11.                 if ((x.Name.CompareTo(y.Name) > 0) || ((x.Name == y.Name) && x.Age > y.Age))  
  12.                 {  
  13.                     return 1;  
  14.                 }  
  15.                 elseif ((x.Name == y.Name) && (x.Age == y.Age))  
  16.                 {  
  17.                     return
     0;  
  18.                 }  
  19.                 else
  20.                 {  
  21.                     return -1;  
  22.                 }  
  23.             });  
  24. /* 
  25. 1.2 因為最近有做datagrid裡面像實現點選任何一列的名稱就按照該名稱排序,那我們該怎麼做呢?可能第一反應是想,為每一個屬性寫一個排序方法不就得了,其實這樣的話無意間增加的程式碼量了,而且不通用,其實這裡可以結合反射來實現. 
  26. */
  27. string propertityName = "Name";  
  28. lstPerson = lstPerson.OrderBy(x =>  
  29.             {  
  30.                 PropertyInfo[] proInfos = x.GetType().GetProperties();  
  31.                 return proInfos.Where(info => info.Name == propertityName).ToList()[0].GetValue(x);  
  32.             }).ToList();  
  33. /* 
  34. 二.List<T>分頁 
  35. 2.1往往有時候我們會從後臺獲取很多資料,存放在List<T>,可是因為介面受限制無法完全展示,我們就會想到分頁顯示,對於分頁顯示我們基本上第一種想法肯定是通過迴圈設定每一頁的Size, 
  36. 其實linq有skip和take方法,skip表示跳過多少元素,take獲取特定個數元素. 看起來程式碼簡潔多了. 
  37. */
  38. publicstatic List<Person> GetPageByLinq(List<Person> lstPerson, int pageIndex, int PageSize)  
  39. {  
  40.     return lstPerson.Skip((pageIndex - 1) * PageSize).Take(PageSize).ToList();  
  41. }  
  42. /* 
  43. 三,List<T>之foreach用法. 
  44. 2.1 如何我相對List裡面的每個物件執行相同操作的話,以前都是通過for迴圈遍歷,其實Linq提供了便捷的Foreach來實現。下面我將對所有的Person年齡+2. 
  45. */
  46. lstPerson.ForEach(x => x.Age= x.Age + 2);  
  47. /*兩個集合之間操作*/
  48. List<string> ListResult = new List<string>();  
  49. ListResult = ListA.Distinct().ToList();//去重
  50. ListResult = ListA.Except(ListB).ToList();//差集
  51. ListResult = ListA.Union(ListB).ToList();  //並集
  52. ListResult = ListA.Intersect(ListB).ToList();//交集
  53. //這裡有7個老師,每個人有3個學生,總共21一個學生裡,我們想要獲得這3個未及格的學生集合。
  54. publicclass Student  
  55. {  
  56.     publicstring StudentName { getset; }  
  57.     publicint Score { getset; }  
  58.     public Student(string StudentName,int Score)  
  59.     {  
  60.         this.StudentName = StudentName;  
  61.         this.Score = Score;  
  62.     }  
  63. }  
  64. publicclass Teacher  
  65. {  
  66.     publicstring TeacherName { getset; }  
  67.     public List<Student> Students { getset; }  
  68.     public Teacher(string TeacherName, List<Student> Students)  
  69.     {  
  70.         this.TeacherName = TeacherName;  
  71.         this.Students = Students;  
  72.     }  
  73. }  
  74. using System;  
  75. using System.Collections.Generic;  
  76. using System.Linq;  
  77. using System.Text;  
  78. namespace TestLinq  
  79. {  
  80.     class Program  
  81.     {  
  82.         staticvoid Main(string[] args)  
  83.         {  
  84.             //執行結果見下圖
  85.             List<Teacher> teachers = new List<Teacher>  
  86.             {  
  87.                 new Teacher("張老師",new List<Student>{ new Student("張三1", 100),new Student("李四1", 90),new Student("王五1", 30) }), //
  88.                 new Teacher("李老師",new List<Student>{ new Student("張三2", 100),new Student("李四2", 90),new Student("王五2", 60) }),  
  89.                 new Teacher("趙老師",new List<Student>{ new Student("張三3", 100),new Student("李四3", 90),new Student("王五3", 40) }), //
  90.                 new Teacher("孫老師",new List<Student>{ new Student("張三4", 100),new Student("李四4", 90),new Student("王五4", 60) }),  
  91.                 new Teacher("錢老師",new List<Student>{ new Student("張三5", 100),new Student("李四5", 90),new Student("王五5", 50) }), //
  92.                 new Teacher("周老師",new List<Student>{ new Student("張三6", 100),new Student("李四6", 90),new Student("王五6", 60) }),  
  93.                 new Teacher("吳老師",new List<Student>{ new Student("張三7", 100),new Student("李四7", 90),new Student("王五7", 60) })  
  94.             };  
  95.             #region 所有任課老師下未及格的學生 方式一
  96.             List<Student> studentList = new List<Student>();  
  97.             foreach (var t in teachers)  
  98.             {  
  99.                 foreach (var s in t.Students)  
  100.                 {  
  101.                     if (s.Score < 60)  
  102.                     {  
  103.                         studentList.Add(s);  
  104.                     }  
  105.                 }  
  106.             }  
  107.             studentList.ForEach(s => Console.WriteLine(string.Format("{0} - {1}", s.StudentName, s.Score)));  
  108.             #endregion
  109.             Console.ReadKey();  
  110.             #region 所有任課老師下未及格的學生 方式二
  111.             var list1 = from t in teachers  
  112.                         from s in t.Students  
  113.                         where s.Score < 60  
  114.                         select s;  
  115.             foreach (var item in list1)  
  116.             {  
  117.                 Console.WriteLine(string.Format("{0} - {1}", item.StudentName, item.Score));  
  118.             }  
  119.             #endregion
  120.             Console.ReadKey();  
  121.             #region 所有任課老師下未及格的學生 方式三
  122.             var list2 = teachers.SelectMany(t => t.Students).Where(s => s.Score < 60);  
  123.             foreach (var s in list2)  
  124.             {  
  125.                 Console.WriteLine(string.Format("{0} - {1}", s.StudentName, s.Score));  
  126.             }  
  127. 相關推薦

    Linq常用List操作總結,Foreach交併SelectMany

    /*  以下圍繞Person類實現,Person類只有Name和Age兩個屬性  一.List<T>排序  1.1 List<T>提供了很多排序方法,sort(),Orde

    Oracle 查詢與數據

    不能 根據 back not char text order by 工資 集中 1.rownum字段 Oracle下select語句每個結果集中都有一個偽字段(偽列)rownum存在。rownum用來標識每條記錄的行號,行號從1開始,每次遞增1。rownum是虛擬的順序值

    C++list的使用總結常用list操作

    一、List定義: List是stl實現的雙向連結串列,與向量(vectors)相比, 它允許快速的插入和刪除,但是隨機訪問卻比較慢。使用時需要新增標頭檔案 #include <list> 二、List定義和初始化:     list<int>lst

    操作系統學習(三)機制

    x86 頁面 管理機 技術 由於 映射 空間 pos 邏輯地址 目錄 1.分頁機制介紹 2.頁表結構 3.頁表項格式 4.虛擬存儲 5.直達底部 分頁機制介紹 分頁機制是 80x86 內存管理機制的第二部分。它在分段機制的基礎上完成虛擬地址到物理地址的轉換過程。分段

    extjs3 操作(帶查詢條件),獲取頁碼開始行大小

    一、分頁操作 extjs3.x版本做分頁操作時,只需配置PagingToolbar 即可,總的來說還是比較方便的,但是預設情況下是不能進行帶查詢條件的分頁操作的,如何解決呢? //xxx表示檔名,xxx.js xxx.prototype.grid=function(){

    python list操作總結

    1、合併列表(extend)       跟元組一樣,用加號(+)將兩個列表加起來即可實現合併:In [1]: x=list(range(1, 13, 2))In [2]: x + ['b', 'a']Out[2]: [1, 3, 5, 7, 9, 11, 'b', 'a']

    List排序操作

    // list元素去重 HashSet h = new HashSet(list); list.clear(); list.addAll(h); // list元素屬性

    基於Metronic的Bootstrap開發框架經驗總結(16)-- 使用外掛bootstrap-table實現表格記錄的查詢排序處理

    在業務系統開發中,對錶格記錄的查詢、分頁、排序等處理是非常常見的,在Web開發中,可以採用很多功能強大的外掛來滿足要求,且能極大的提高開發效率,本隨筆介紹這個bootstrap-table是一款非常有名的開源表格外掛,在很多專案中廣泛的應用。Bootstrap-table外掛提供了非常豐富的屬性設定,可以實現

    elasticsearch 5.5.0 java操作(新增索引搜尋)

    網上資源比較亂、比較雜,稍微總結一下,幫助大家避免像我一樣走彎路………… ———————————————————————————————————— 首先引入maven依賴: <!--elasticsearch--> <dependency

    HPUX-V3之常用LVM操作總結

    HP-UX的11.31與之前的11.23相比,LVM有了些許變化,其實使用lvmadmin即可看出,OS對LVM的各版本的支援其實有了較好的支援。本文會簡單介紹在V3下從建立Physical

    Oracle總結【SQL細節多表查詢分組查詢

    前言 在之前已經大概瞭解過Mysql資料庫和學過相關的Oracle知識點,但是太久沒用過Oracle了,就基本忘了…印象中就只有基本的SQL語句和相關一些概念….寫下本博文的原因就是記載著Oracle一些以前沒注意到的知識點…以後或許會有用… 例項與資料

    C#對List中的資料進行取交集操作的方法

    第一步:定義兩個list並進行初始化 public List<string> GetList1()         {             List<string> lis

    mysql進階(二)之細談索引與慢日誌

    連表 組合索引 rar 偏移量 最小值 num glob 要求 for 索引 1、數據庫索引   數據庫索引是一種數據結構,可以以額外的寫入和存儲空間為代價來提高數據庫表上的數據檢索操作的速度,以維護索引數據結構。索引用於快速定位數據,而無需在每次訪問數據庫表時搜索數據

    python16_day18【Django_Form表單

    html中 ech 地址 pat gef 是否 sed 需要 hid 一、表單   Django的Form主要具有一下幾大功能: 生成HTML標簽 驗證用戶數據(顯示錯誤信息) HTML Form提交保留上次提交數據 初始化頁面顯示內容     1.Form類   

    SQL通用優化方案(where優化索引優化優化事務優化臨時表優化)

    truncate height 能夠 時有 大數據量 2017年 固然 分頁 索引優化 SQL通用優化方案:1. 使用參數化查詢:防止SQL註入,預編譯SQL命令提高效率2. 去掉不必要的查詢和搜索字段:其實在項目的實際應用中,很多查詢條件是可有可無的,能從源頭上避免的多余

    使用java.util.List的subList方法進行

    util 數據 size 等於 from 修改 system 導致 lov java.util.List中有一個subList方法,用來返回一個list的一部分視圖。 List<E> subList(int fromIndex, int toIndex);

    Linq:使用Take和Skip實現

    list() key program console post 內容 mage while itl Skip,Take: list = list.Skip(pageNum * pageSize).Take(pageSize).ToList(); pageSize :表示

    JAVAEE——BOS物流項目04:學習計劃datagrid查詢批量刪除修改功能

    報錯 datagrid config exce this 調整 bject ephone 窗口 1 學習計劃 1、datagrid使用方法(重要) n 將靜態HTML渲染為datagrid樣式 n 發送ajax請求獲取json數據創建datagrid n 使用easyUI提

    JDBC【數據庫連接池DbUtils框架

    rom cda 連接 開源 over rownum cal 每次 常見 1.數據庫連接池 什麽是數據庫連接池 簡單來說:數據庫連接池就是提供連接的。。。 為什麽我們要使用數據庫連接池 數據庫的連接的建立和關閉是非常消耗資源的 頻繁地打開、關閉連接造成系統性能低下 編寫連

    rest-framework框架 -- 解析器路由

    表示 color 組件 elf post data ... rest art rmp 解析器 :reqest.data取值的時候才執行 對請求的數據進行解析:是針對請求體進行解析的。表示服務器可以解析的數據格式的種類 django中的發送請求 #如果是這樣的格式發送的數據