成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

神兵利器 淺談如何使用LINQ檢索和操作數據庫

開發 后端
本文將簡單介紹如何使用LINQ檢索和操作數據庫。自.NET 3.0開始,LINQ(Language Integrated Query,整合查詢語言)便逐漸出現在.NET開發的各個角落,它不僅提供了一種用于快速檢索結構化標記語言(如XML)的方法,而且還非常有效地被用來處理與數據庫的交互。

借助于LINQ提供的各種功能和獨有的語法結構,LINQ已經被用來作為一種統一的數據庫訪問技術而被廣泛使用,用以消除從數據訪問層到數據源層出不窮的區別。通過LINQ檢索,我們已經可以不用自己編寫一行代碼來從數據庫獲取到數據,LINQ和SQL之間提供了一個直接映射關系,它可以通過我們事先指定的數據庫連接自動生成數據庫實體類,而我們只需要通過LINQ語句操作這些實體對象就可以非常輕松地從數據庫中獲取到數據。當然,LINQ所生成的實體對象的功能遠遠不止這些,它甚至支持數據的更新和存儲過程的調用,所有這些都可以通過簡單的幾行LINQ語句來完成,讓我們真正擺脫了編寫數據訪問層、數據庫實體類的工作。

下面就讓我們來看看LINQ的神奇功能吧!

使用LINQ生成數據庫實體類

Visual Studio 2008集成開發環境為我們提供了很多有用的功能來實現LINQ to SQL。為了讓讀者可以自行嘗試本文所舉的示例,讀者可能需要在本地安裝一個SQL Server數據庫實例,Northwind是微軟官方提供的一個不錯的例子,如果你本地沒有安裝這個實例,可以去下面這個地址下載:

http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

我們在Visual Studio 2008中新建一個控制臺應用程序,取名為LINQExample,然后打開Server Explorer窗口并連接到Northwind數據庫。如果找不到Server Explorer窗口,可以通過View-Server Explorer菜單打開。

在Server Explorer窗口中,右鍵單擊Data Connection節點,選擇Add Connection,在彈出的窗口中選擇Northwind數據庫。

選擇Northwind數據庫

在工程中添加Northwind.dbml文件,該文件是LINQ to SQL Classes類型的文件。

添加Northwind.dbml文件

然后將Server Explorer窗口中Northwind數據庫中的所有Table和Stored Procedures拖放到Northwind.dbml視圖窗口中。此時,在Northwind.dbml文件中,Visual Sdutio已經自動為我們創建了數據庫實體類和映射到數據庫存儲過程的靜態方法,在后面的示例中我們可以通過LINQ語句直接使用它們。

通過LINQ語句映射

打開Class View窗口,在其中也可以看到自動生成的實體類和靜態方法。

打開Class View窗口M

是不是非常方便?。磕墙酉聛砭蛠砜纯慈绾瓮ㄟ^LINQ檢索和修改數據。

使用LINQ檢索數據

LINQ檢索提供的語法結構與SQL比較接近,這讓我們使用起來更加容易上手。Northwind.dbml自動包裝了一個上下文對象NorthwindDataContext類,其中包括了我們在Northwind數據庫中要使用的所有實體類和存儲過程映射方法,同時還提供了操作表數據的方法,使用時我們不需要去關心它是如何連接數據庫并進行底層數據操作的。事實上,Northwind.dbml文件中已經包含了這些基礎設施!使用記事本打開Northwind.dbml,可以發現這是一個純粹的XML結構化文件,里面包含了數據庫連接字符串和一些數據庫實體類的映射關系,同時,Northwind.designer.cs文件中也做了很多基礎性的工作,感興趣的讀者可以自行研究其中的代碼,或許對解決實際問題有所幫助。本文在這里不對這個文件的具體結構作詳細的解釋。

下面的這個例子展示了通過LINQ檢索Northwind數據庫中Customers表City等于London的數據,并在Command窗口中打印出來。

  1. using (NorthwindDataContext context =new NorthwindDataContext())   
  2. {   
  3. var results = from curstomers in context.Customers   
  4. where curstomers.City =="London"   
  5. orderby curstomers.CompanyName   
  6. select curstomers;   
  7.  
  8. foreach (var curstomers in results)   
  9. {   
  10. Console.WriteLine("Company is {0} and Contact is {1}",   
  11. curstomers.CompanyName, curstomers.ContactName);   
  12. }   
  13.  
  14. // Pause to see the output   
  15. Console.ReadLine();   

這個是執行結果:

執行結果

使用LINQ更新數據

LINQ不僅可以從數據庫中檢索數據,借助于NorthwindDataContext上下文對象提供的方法,我們也可以通過LINQ非常方便地將數據更新到數據庫中。下面的例子展示了將數據Insert和Update到數據庫并從數據庫中刪除數據,其中使用了LINQ中的lambda表達式用于從數據源查詢數據(lambda表達式是LINQ查詢語句的一種簡寫形式)。

  1. using(NorthwindDataContextcontext=newNorthwindDataContext())  
  2. {  
  3. //AddanewrecordandverifyitexiststhroughCount  
  4. varcustomer=newCustomer()  
  5. {  
  6. CompanyName="DramaCafe",  
  7. CustomerID="DRACA",  
  8. ContactName="TomSmith",  
  9. City="BeverlyHills",  
  10. Address="123MelrosePlace",  
  11. PostalCode="90210" 
  12. };  
  13. context.Customers.InsertOnSubmit(customer);  
  14. context.SubmitChanges();  
  15. Console.WriteLine("NumberofDRACArecords:{0}",context.Customers.Where(c=>c.CustomerID=="DRACA").Count());  
  16.  
  17. //ModifytherecordandverifyitischangedthroughCount  
  18. customer.ContactName="JoeSmith";  
  19. context.SubmitChanges();  
  20. Console.WriteLine("NumberofJoeSmithrecords:{0}",context.Customers.Where(c=>c.ContactName=="JoeSmith").Count());  
  21.  
  22. //DeletearecordandverifyitisremovedthroughCount  
  23. context.Customers.DeleteOnSubmit(customer);  
  24. context.SubmitChanges();  
  25. Console.WriteLine("NumberofDRACArecords:{0}",context.Customers.Where(c=>c.CustomerID=="DRACA").Count());  
  26.  
  27. //Pausetoseetheoutput  
  28. Console.ReadLine();  
這個是執行結果:

執行結果

使用LINQ執行存儲過程

在前面我們已經看到,Northwind.dbml在生成數據庫實體類的同時,也生成了映射數據庫存儲過程的靜態方法,通過NorthwindDataContext上下文對象我們可以直接在LINQ中調用這些存儲過程。下面的例子展示了在LINQ中調用Ten_Expensive_Products存儲過程,用于檢索Products表中單價最貴的10中商品的名稱。

  1. using(NorthwindDataContextcontext=newNorthwindDataContext())  
  2. {  
  3. //Usethetenmostexpensiveproductsstoredprocedure  
  4. varresults=fromproductsincontext.Ten_Most_Expensive_Products()  
  5. selectproducts;  
  6.  
  7. foreach(varproductinresults)  
  8. {  
  9. Console.WriteLine("Productpriceis{0}",product.UnitPrice);  
  10. }  
  11.  
  12. //Pausetoseetheoutput  
  13. Console.ReadLine();  

這個是執行結果:

執行結果

LINQ檢索結語

使用LINQ檢索數據庫確實可以為我們開發數據庫應用程序帶來許多的便利性,例如省去編寫數據庫實體類和數據庫訪問層的代碼,但這同時也會帶來一些問題!例如在大型應用項目中這將破壞整體項目的結構,而且難以做到應用層與數據訪問層的松耦合結構,另外就是涉及到復雜數據庫事務時LINQ往往難以應付,一個好的解決辦法就是將事務移至數據庫,在存儲過程中解決事務問題,然后在數據訪問層統一調用存儲過程,不過有些非常特殊的應用層需求還是會存在問題。從這個意義上來看,LINQ仍然不可能全部替代傳統意義上的數據庫訪問層,不過在一些小型應用或快速原型開發中,使用LINQ確實可以給我們省去很多麻煩。

還有一點需要說明的是,鑒于Visual Studio可以允許我們在Server Explorer中連接除SQL之外的其它數據庫,這也就意味著我們可以通過LINQ訪問其它類型的數據庫。我們可以在工程中創建多個不同的dbml文件,用以連接不同類型的數據庫,然后在上層使用工廠進行調用切換,就可以達到支持多數據庫應用的目的。有關這一點,讀者可以自己去嘗試。

【編輯推薦】

  1. 使用LINQ查詢泛型字典Dictionary
  2. 淺析Linq to SQL更新數據時容易忽略的問題
  3. 淺談LINQ to SQL集成數據庫語言優劣
  4. LINQ橫向對比foreach方法
  5. 淺談LINQ如何插入刪除和更新數據庫記錄備注
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-09-15 09:50:07

Linq操作數據庫

2020-11-16 08:56:02

Python

2009-09-07 17:32:14

LINQ檢索數據

2011-07-01 13:42:24

QT 數據庫

2011-07-05 10:27:06

MySQL數據庫檢索排序

2009-09-03 09:52:26

C# treeview

2023-04-27 09:36:43

2011-04-19 10:20:09

數據庫

2022-10-09 15:41:54

Python數據庫

2009-08-24 16:46:04

C# 泛型

2009-05-08 10:15:04

LINQ插入刪除

2023-12-27 13:44:00

數據庫系統分布式

2023-06-15 15:21:43

2009-08-04 14:52:33

Visual Web ASP.NET

2023-12-14 15:07:31

多線程數據庫代碼

2021-06-29 06:25:22

Nest.jsTypeORM數據庫

2009-09-14 13:30:04

Linq數據和對象

2009-09-08 15:19:52

Linq Where操

2016-05-11 10:09:49

數據層代碼FastQuery

2023-08-08 07:47:55

編程語言MongoDB
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久一区二区精品 | www.日韩欧美| 欧美一级片 | 农夫在线精品视频免费观看 | 国产欧美日韩精品一区 | 亚洲精品一二三 | 精品欧美乱码久久久久久 | 99久久婷婷国产综合精品首页 | 91色在线| 久久偷人 | 成人性视频在线播放 | 精精国产xxxx视频在线播放7 | 日韩中文一区 | 成人国产在线视频 | 国产精品不卡一区 | 精品av天堂毛片久久久借种 | 日韩黄色小视频 | 在线观看成人 | 99精品视频一区二区三区 | 国产欧美日韩一区二区三区在线 | 亚洲成人精品在线 | www成年人视频 | 亚洲成av人片在线观看无码 | 国产精品www | 盗摄精品av一区二区三区 | 在线播放亚洲 | 中文字幕在线第一页 | 久久1区| 激情一区二区三区 | 一区二区成人在线 | 国产激情一区二区三区 | 99色播| 欧美亚洲国产成人 | 在线一区视频 | 国产午夜精品视频 | 成人免费淫片aa视频免费 | 色欧美综合 | 99久久99| 羞羞的视频免费看 | 在线观看中文字幕视频 | 婷婷色婷婷 |