程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> LinQ實戰學習筆記(一) LINQ to (Objects, XML, SQL) 入門初步,linqobjects

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

編輯:C#入門知識

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


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/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved