LinQ實戰學習筆記(一) LINQ to (Objects, XML, SQL) 入門初步

来源:http://www.cnblogs.com/hackpig/archive/2016/08/25/5806090.html
-Advertisement-
Play Games

LINQ對於筆者來說, 優美而濃縮的代碼讓人震驚. 研究LINQ就是在藝術化自己的代碼. 之前只是走馬觀花學會了基本的語法, 但是經常在CSDN看到令人驚訝自嘆不如的LINQ代碼, 還是讓人羡慕嫉妒恨, 真有一種心血來潮想追趕的衝動. 所以, 還是決定系統的學習一下LINQ. (1.4) LINQ ...


LINQ對於筆者來說, 優美而濃縮的代碼讓人震驚. 研究LINQ就是在藝術化自己的代碼.

之前只是走馬觀花學會了基本的語法, 但是經常在CSDN看到令人驚訝自嘆不如的LINQ代碼, 還是讓人羡慕嫉妒恨, 真有一種心血來潮想追趕的衝動.

所以, 還是決定系統的學習一下LINQ.

 

(1.4) LINQ to Objects

這是一個簡單的hello world性質的例子.

 

 1  var words = new List<string>() { "hello", "wonderful","linq","beautiful","world"};
 2             var res = from s in words
 3                       where s.Length <= 5
 4                       select s;
 5             Console.WriteLine("輸出串長度<=5的單詞:" + Environment.NewLine);
 6             foreach (var m in res)
 7             {
 8                 Console.WriteLine(m);
 9             }
10 
11             //按字母順序對一個單詞進行排序,然後按照其長度進行分組,並按照其中包含的單詞長度逆序排列各組.
12             Console.WriteLine(Environment.NewLine + "按長度分組排序顯示:" + Environment.NewLine);
13             var res1 = from s in words
14                        orderby s ascending                      //ascending升序
15                        group s by s.Length into lengroup
16                        orderby lengroup.Key descending          //descending降序
17                        select new { Length = lengroup.Key, Words = lengroup };
18             foreach (var m in res1)
19             {
20                 Console.WriteLine("單詞長度:" + m.Length);
21                 foreach (var str in m.Words)
22                     Console.WriteLine(" " + str);
23             }

 

結果如下圖:

 

現在, 對於List<>進行數據處理, 我就只用 LINQ to Objects了.

 

(1.5) LINQ to XML 初步

 上代碼:

 1 class Book
 2     {
 3         public string Publisher;
 4         public string Title;
 5         public int Year;
 6 
 7         public Book(string title, string publisher, int year)
 8         {
 9             this.Title = title;
10             this.Publisher = publisher;
11             this.Year = year;
12         }
13     }

 

 1  Book[] books = new Book[]{
 2                 new Book("Ajax in Action","Manning",2005),
 3                 new Book("Windows Froms in Action","Manning",2006),
 4                 new Book("Rss and Atom in Action","Manning",2006)
 5             };
 6             XElement xml = new XElement("books",
 7                 from s in books
 8                 where s.Year == 2006
 9                 select new XElement("book",
10                     new XAttribute("title", s.Title),
11                     new XElement("publisher", s.Publisher)
12                     ));
13             Console.WriteLine(xml);

結果如下圖:

看上去LINQ to XML從表達上比DOM更加形象.這代碼和它生成的XML結構基本上是"所見即所得"的.

另外, LINQ to XML是以元素為中心的, 而DOM是以文檔為中心的.

 

(1.6) LINQ to SQL

 下麵的代碼的幾點說明:

1. 首先需要定義一個實體類, 用以和Northwind數據的Contacts數據表關聯起來.

    本文所用的Northwind數據是微軟提供演示的, 你可以自己去下. 也可以自己創建一個.

2. 自定義屬性 [Table(Name = "Contacts")], 這個你得引入System.data.linq, 否則你懂的.

3. 自定義屬性 [Column(Name = "Name")], 在代碼中用於定義與數據表中列的對應關係.

 1 static class HelloLinqToSql
 2     {
 3         [Table(Name = "Contacts")]
 4         public class Contact
 5         {
 6             [Column(IsPrimaryKey = true)]
 7             public int ContactID { get; set; }
 8             [Column(Name = "Name")]
 9             public string Name { get; set; }
10             [Column]
11             public string City { get; set; }
12         }
13     }

 

4. DataContext是設備上下文, 你肯定知道是用來傳入連接字元串的

5. 連接字元串中的 security=SSPI 使用windows自帶的安全驗證機制, 不用輸入用戶名與密碼.

6. DataContext.GetTable<>, 這個是泛型的, 註意到沒有? 允許你操作強類型對象.

 1  DataContext db = new DataContext(@"server=(local);integrated security=SSPI;database=Northwind");
 2 
 3             var contacts =
 4               from contact in db.GetTable<HelloLinqToSql.Contact>()
 5               where contact.City == "武漢"
 6               select contact;
 7 
 8             Console.WriteLine("查找在武漢的聯繫人"+Environment.NewLine);
 9             foreach (var contact in contacts)
10                 Console.WriteLine("聯繫人: " + contact.Name.Trim()+" ID:"+contact.ContactID);

 

結果如下圖:

這個效果, 真是顛覆了我對關係資料庫操作認知! 

下麵的事, 都被LINQ承包了:

  • 打開資料庫連接
  • 生成SQL查詢
  • 執行SQL查詢
  • 將執行結果填充至對象中

 

原創文章,出自"博客園, 豬悟能'S博客" : http://www.cnblogs.com/hackpig/

 


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

-Advertisement-
Play Games
更多相關文章
  • ContextMenuStrip是就是所說的右鍵菜單,在VS里可以直接新建,挺方便。但是跟著師父看了很多代碼,發現了好多時候都需要自己寫這部分代碼。這個部分目前為止我瞭解的還不是很多,更細緻的就只有等後面再深入瞭解到了再記了。 現在是將contextmenustrip綁定到label上面去,新建了一 ...
  • ...
  • 在很多人或許很多技術大神都會覺得IIS的安裝和4.0沒得先後順序的。其錯誤弊端在與IIS沒有註冊到4.0上。 經過今天遇到了伺服器安裝服務端發覺報錯【無法識別的屬性“targetFramework”。請註意屬性名稱區分大小寫。錯誤解決辦法】客戶端報404錯誤,這個時候我們都會覺得沒有找到相對應的路徑 ...
  • 這幾天無意間看到一個關於分頁的帖子,覺得寫得挺好的。關於這些東西,自己一直都是只知道原理,卻沒有真正動手做過,於是研究了一下分頁的原理自己動手寫了一個十分特別非常簡單的分頁程式,在這裡與大家分享一下。 這個程式取數據使用的ado.net,首先先新建一個取數據的類PageDAl 然後記得修改一下web ...
  • 前言 在開發應用程式時,通常只讓程式運行一個實例。所以,就要判斷程式是否已經運行。 下麵是我自己在項目中使用到,封裝好的幫助類。有 普通的 C 應用程式 和 Windows CE 和 Windows Mobile 應用程式使用的方法。 主要是通過 System.Threading.Mutex 類 和 ...
  • Razor是MVC框架視圖引擎,我們今天就來說一說Razor視圖引擎。 首先還是來創建一個基礎項目叫Razor來演示。 先來定義一個Model叫Product 接著,來定義一個控制器。 最後,在Views/Home文件夾中創建Index.cshtml文件。 1. 使用模型對象 我們在視圖的第一行使用 ...
  • 舉幾個值類型和引用類型的記憶體配置: 值類型存儲在棧中,引用類型堆里: 1,數組 數組是引用類型,但是數組的元素可以是值類型或引用類型 2. 結構 結構是值類型,簡略的看個例子 struct sample { public int X; public int Y; } simple ss = new ...
  • ASP.NET Core基於 .NET Core 項目模型,它支持構建能夠運行在 Windows、Mac和 Linux 上的跨平臺應用程式。當您構建一個 .Net Core 項目的時候,您可以選擇一種 .NET框架來構建您的應用程式,.NET Framework (CLR)、 .NET Core (... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...