Linq之Lambda表達式

来源:http://www.cnblogs.com/bkyan/archive/2016/06/02/bkyan.html
-Advertisement-
Play Games

一 什麼是LINQ? 二 簡單的Linq例子。(簡單形式我就不介紹了,主要以Lambda形式介紹)。 1 首先創建一個實體對象類並賦值。 public class Person { public int PId { get; set; } // 自增Id public string Name { g ...


一 什麼是LINQ?

LINQ即Language Integrated Query(語言集成查詢),LINQ是集成到C#和Visual Basic.NET這些語言中用於提供查詢數據能力的一個新特性。

二 簡單的Linq例子。(簡單形式我就不介紹了,主要以Lambda形式介紹)。

 1  首先創建一個實體對象類並賦值。

 public class Person
    {
        public int PId { get; set; } //自增ID

        public string Name { get; set; }

        public int Age { get; set; }

        public int JobId { get; set; }
    }

    List<Person> pA = new List<Person>();
            pA.Add(new Person() { PId = 1, Name = "張三", Age = 16, JobId = 1 });
            pA.Add(new Person() { PId = 2, Name = "小紅", Age = 18, JobId = 2 });
            pA.Add(new Person() { PId = 3, Name = "王武", Age = 20, JobId = 3 });
            pA.Add(new Person() { PId = 4, Name = "小梅", Age = 17, JobId = 4 });
            pA.Add(new Person() { PId = 5, Name = "小李", Age = 24, JobId = 3 }); 

    public class Job 
    {
        public int JobId { get; set; } //自增ID
        public string JobName { get; set; }
        public int WorkAge { get; set; }
    }

List<Job> jB = new List<Job>();
            jB.Add(new Job() { JobId = 1, JobName = "製造業", WorkAge = 3 });
            jB.Add(new Job() { JobId = 2, JobName = "IT行業", WorkAge = 5 });
            jB.Add(new Job() { JobId = 3, JobName = "建築業", WorkAge = 2 });
            jB.Add(new Job() { JobId = 4, JobName = "金融業", WorkAge = 1 }); 

2 查詢所有人:

var result = pA.Select(k => k).ToList();

3.where條件(年齡大於18的):

var result1 = pA.Where(k => k.Age > 18).ToList(); //where
var result2 = pA.Where(k => k.Age > 18 && k.JobId==3 ).ToList(); // and
var result3 = pA.Where(k => k.Age > 18 || k.JobId == 3).ToList(); // or

4.group by(一個欄位和多個欄位)

//單個欄位
var result4 = pA.Where(k => k.Age > 10).GroupBy(j => j.JobId).Select(l => l.Key).ToList();
//多個欄位
var result5 = pA.Where(k => k.Age > 10)
                .GroupBy(a => new Person{ PId=a.PId ,  Name=a.Name, Age=a.Age, JobId=a.JobId })
                .Select(a => a.Key).ToList();

4.1 Distinct(單列去重)

//單列去重
var result13 = pA.Select(k => k.JobId).Distinct();

5.order by(排序,動態排序)

 var result6 = pA.Where(k => k.Age > 10)
                 .OrderBy(k => k.Age).ToList(); // asc

 var result7 = pA.Where(k => k.Age > 10)
                 .OrderByDescending(k => k.Age).ToList(); // desc
//先按年齡倒序,在按職業正序,在按名稱倒序。
var result8 = pA.Where(k => k.Age > 10)
                .OrderByDescending(k => k.Age).ThenBy(k => k.JobId).ThenByDescending(k => k.Name).ToList();

//動態排序
var result81 = pA.OrderBy(k => GetPropertyValue(k, "Age")).ToList(); var result82 = pA.OrderBy(k => GetPropertyValue(k, "JobId")).ToList(); private static object GetPropertyValue(object obj, string property) { System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property); return propertyInfo.GetValue(obj, null); }

 6 count() (總行數)

var result9 = pA.Where(k => k.Age > 10).Count();

7 avg() (平均年齡)

var result10 = pA.Average(k => k.Age);

8 Contains (相當於sql中like)檢索名稱中有小字:

註意:如果檢索的是英文的話,需要大小寫轉換,因為linq區分大小寫!

var result11 = pA.Where(k => k.Name.Contains("")).ToList();

9 join 

var result12 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new {j.PId,j.Name,j.Age,k.JobName }).ToList();

10 left join (DefaultIfEmpty)

var result13 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new { j.PId, j.Name, j.Age, k.JobName }).DefaultIfEmpty().ToList();

 11 Take (相當於top)

//獲取前幾條(相當於top)
var result154 = pA.Where(o => o.Age > 18).Take(3).ToList();

 

  轉載請註明出處:http://www.cnblogs.com/bkyan/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Win8 app判斷網路連接狀態 推薦:http://www.cnblogs.com/roucheng/p/3535198.html ...
  • 代理伺服器(Proxy Server)是個人網路和Internet服務商之間的中間代理機構,它負責轉發合法的網路信息,對轉發進行控制和登記。代理伺服器作為連接Internet(廣域網)與Intranet(區域網)的橋梁,在實際應用中發揮著極其重要的作用。 環境:Win7(64位)+VMware11( ...
  • 1:W 查看系統整體負載,無法查看具體負載,比如記憶體,磁碟 23:25:20 up 13 min, 2 users, load average: 0.00, 0.01, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT flex tty1 - 23:13 1 ...
  • 屏幕捕捉快捷鍵動作............................保存到............-快捷鍵 全屏捕捉........................桌面(.PDF文件)......Command + Shift + 3 (win+shift+3)屏幕部分畫面.......... ...
  • ApiView是.net api的介面文檔查看網站,用於解決分散式開發過程中的Api介面管理和溝通問題。 自動生成api文檔; 方便調試及第三方開發人員對接,可以應用在asp.net mvc,wcf,webservice 中使用; 代碼及原理都很簡單,方便修改和完善。 ...
  • 各級省份代碼: 各級市代碼: ...
  • 上次分享了控制器向視圖傳遞數據的4種方式,今天再來給大家講講MVC視圖中的數據如何提交到控制器。 我們可以通過以下幾種方式提交數據到控制器: 1、通過Request.Form讀取表單數據 在 控制器動作方法(Action)中,POST方法提交的表單可以使用Request.Form讀取其中的數據: < ...
  • 過濾器 過濾器(Filter)把附加邏輯註入到MVC框的請求處理,實現了交叉關註。所謂交叉關註(Cross-Cutting Concerns),是指可以用於整個應用程式,而又不適合放置在某個局部位置的功能,否則會打破關註分離模式。典型的例子有:登錄、授權、緩存等等。 使用過濾器 如果希望動作方法只能 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...