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

神兵利器 淺談如何使用LINQ檢索和操作數(shù)據(jù)庫(kù)

開(kāi)發(fā) 后端
本文將簡(jiǎn)單介紹如何使用LINQ檢索和操作數(shù)據(jù)庫(kù)。自.NET 3.0開(kāi)始,LINQ(Language Integrated Query,整合查詢語(yǔ)言)便逐漸出現(xiàn)在.NET開(kāi)發(fā)的各個(gè)角落,它不僅提供了一種用于快速檢索結(jié)構(gòu)化標(biāo)記語(yǔ)言(如XML)的方法,而且還非常有效地被用來(lái)處理與數(shù)據(jù)庫(kù)的交互。

借助于LINQ提供的各種功能和獨(dú)有的語(yǔ)法結(jié)構(gòu),LINQ已經(jīng)被用來(lái)作為一種統(tǒng)一的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)而被廣泛使用,用以消除從數(shù)據(jù)訪問(wèn)層到數(shù)據(jù)源層出不窮的區(qū)別。通過(guò)LINQ檢索,我們已經(jīng)可以不用自己編寫一行代碼來(lái)從數(shù)據(jù)庫(kù)獲取到數(shù)據(jù),LINQ和SQL之間提供了一個(gè)直接映射關(guān)系,它可以通過(guò)我們事先指定的數(shù)據(jù)庫(kù)連接自動(dòng)生成數(shù)據(jù)庫(kù)實(shí)體類,而我們只需要通過(guò)LINQ語(yǔ)句操作這些實(shí)體對(duì)象就可以非常輕松地從數(shù)據(jù)庫(kù)中獲取到數(shù)據(jù)。當(dāng)然,LINQ所生成的實(shí)體對(duì)象的功能遠(yuǎn)遠(yuǎn)不止這些,它甚至支持?jǐn)?shù)據(jù)的更新和存儲(chǔ)過(guò)程的調(diào)用,所有這些都可以通過(guò)簡(jiǎn)單的幾行LINQ語(yǔ)句來(lái)完成,讓我們真正擺脫了編寫數(shù)據(jù)訪問(wèn)層、數(shù)據(jù)庫(kù)實(shí)體類的工作。

下面就讓我們來(lái)看看LINQ的神奇功能吧!

使用LINQ生成數(shù)據(jù)庫(kù)實(shí)體類

Visual Studio 2008集成開(kāi)發(fā)環(huán)境為我們提供了很多有用的功能來(lái)實(shí)現(xiàn)LINQ to SQL。為了讓讀者可以自行嘗試本文所舉的示例,讀者可能需要在本地安裝一個(gè)SQL Server數(shù)據(jù)庫(kù)實(shí)例,Northwind是微軟官方提供的一個(gè)不錯(cuò)的例子,如果你本地沒(méi)有安裝這個(gè)實(shí)例,可以去下面這個(gè)地址下載:

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

我們?cè)赩isual Studio 2008中新建一個(gè)控制臺(tái)應(yīng)用程序,取名為L(zhǎng)INQExample,然后打開(kāi)Server Explorer窗口并連接到Northwind數(shù)據(jù)庫(kù)。如果找不到Server Explorer窗口,可以通過(guò)View-Server Explorer菜單打開(kāi)。

在Server Explorer窗口中,右鍵單擊Data Connection節(jié)點(diǎn),選擇Add Connection,在彈出的窗口中選擇Northwind數(shù)據(jù)庫(kù)。

選擇Northwind數(shù)據(jù)庫(kù)

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

添加Northwind.dbml文件

然后將Server Explorer窗口中Northwind數(shù)據(jù)庫(kù)中的所有Table和Stored Procedures拖放到Northwind.dbml視圖窗口中。此時(shí),在Northwind.dbml文件中,Visual Sdutio已經(jīng)自動(dòng)為我們創(chuàng)建了數(shù)據(jù)庫(kù)實(shí)體類和映射到數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的靜態(tài)方法,在后面的示例中我們可以通過(guò)LINQ語(yǔ)句直接使用它們。

通過(guò)LINQ語(yǔ)句映射

打開(kāi)Class View窗口,在其中也可以看到自動(dòng)生成的實(shí)體類和靜態(tài)方法。

打開(kāi)Class View窗口M

是不是非常方便?。磕墙酉聛?lái)就來(lái)看看如何通過(guò)LINQ檢索和修改數(shù)據(jù)。

使用LINQ檢索數(shù)據(jù)

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

下面的這個(gè)例子展示了通過(guò)LINQ檢索Northwind數(shù)據(jù)庫(kù)中Customers表City等于London的數(shù)據(jù),并在Command窗口中打印出來(lái)。

  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();   

這個(gè)是執(zhí)行結(jié)果:

執(zhí)行結(jié)果

使用LINQ更新數(shù)據(jù)

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

  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();  
這個(gè)是執(zhí)行結(jié)果:

執(zhí)行結(jié)果

使用LINQ執(zhí)行存儲(chǔ)過(guò)程

在前面我們已經(jīng)看到,Northwind.dbml在生成數(shù)據(jù)庫(kù)實(shí)體類的同時(shí),也生成了映射數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的靜態(tài)方法,通過(guò)NorthwindDataContext上下文對(duì)象我們可以直接在LINQ中調(diào)用這些存儲(chǔ)過(guò)程。下面的例子展示了在LINQ中調(diào)用Ten_Expensive_Products存儲(chǔ)過(guò)程,用于檢索Products表中單價(jià)最貴的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();  

這個(gè)是執(zhí)行結(jié)果:

執(zhí)行結(jié)果

LINQ檢索結(jié)語(yǔ)

使用LINQ檢索數(shù)據(jù)庫(kù)確實(shí)可以為我們開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序帶來(lái)許多的便利性,例如省去編寫數(shù)據(jù)庫(kù)實(shí)體類和數(shù)據(jù)庫(kù)訪問(wèn)層的代碼,但這同時(shí)也會(huì)帶來(lái)一些問(wèn)題!例如在大型應(yīng)用項(xiàng)目中這將破壞整體項(xiàng)目的結(jié)構(gòu),而且難以做到應(yīng)用層與數(shù)據(jù)訪問(wèn)層的松耦合結(jié)構(gòu),另外就是涉及到復(fù)雜數(shù)據(jù)庫(kù)事務(wù)時(shí)LINQ往往難以應(yīng)付,一個(gè)好的解決辦法就是將事務(wù)移至數(shù)據(jù)庫(kù),在存儲(chǔ)過(guò)程中解決事務(wù)問(wèn)題,然后在數(shù)據(jù)訪問(wèn)層統(tǒng)一調(diào)用存儲(chǔ)過(guò)程,不過(guò)有些非常特殊的應(yīng)用層需求還是會(huì)存在問(wèn)題。從這個(gè)意義上來(lái)看,LINQ仍然不可能全部替代傳統(tǒng)意義上的數(shù)據(jù)庫(kù)訪問(wèn)層,不過(guò)在一些小型應(yīng)用或快速原型開(kāi)發(fā)中,使用LINQ確實(shí)可以給我們省去很多麻煩。

還有一點(diǎn)需要說(shuō)明的是,鑒于Visual Studio可以允許我們?cè)赟erver Explorer中連接除SQL之外的其它數(shù)據(jù)庫(kù),這也就意味著我們可以通過(guò)LINQ訪問(wèn)其它類型的數(shù)據(jù)庫(kù)。我們可以在工程中創(chuàng)建多個(gè)不同的dbml文件,用以連接不同類型的數(shù)據(jù)庫(kù),然后在上層使用工廠進(jìn)行調(diào)用切換,就可以達(dá)到支持多數(shù)據(jù)庫(kù)應(yīng)用的目的。有關(guān)這一點(diǎn),讀者可以自己去嘗試。

【編輯推薦】

  1. 使用LINQ查詢泛型字典Dictionary
  2. 淺析Linq to SQL更新數(shù)據(jù)時(shí)容易忽略的問(wèn)題
  3. 淺談LINQ to SQL集成數(shù)據(jù)庫(kù)語(yǔ)言優(yōu)劣
  4. LINQ橫向?qū)Ρ萬(wàn)oreach方法
  5. 淺談LINQ如何插入刪除和更新數(shù)據(jù)庫(kù)記錄備注
責(zé)任編輯:彭凡 來(lái)源: cnblogs
相關(guān)推薦

2009-09-15 09:50:07

Linq操作數(shù)據(jù)庫(kù)

2020-11-16 08:56:02

Python

2009-09-07 17:32:14

LINQ檢索數(shù)據(jù)

2011-07-01 13:42:24

QT 數(shù)據(jù)庫(kù)

2011-07-05 10:27:06

MySQL數(shù)據(jù)庫(kù)檢索排序

2023-04-27 09:36:43

2011-04-19 10:20:09

數(shù)據(jù)庫(kù)

2009-09-03 09:52:26

C# treeview

2022-10-09 15:41:54

Python數(shù)據(jù)庫(kù)

2009-08-24 16:46:04

C# 泛型

2009-05-08 10:15:04

LINQ插入刪除

2009-08-04 14:52:33

Visual Web ASP.NET

2023-06-15 15:21:43

2023-12-27 13:44:00

數(shù)據(jù)庫(kù)系統(tǒng)分布式

2023-12-14 15:07:31

多線程數(shù)據(jù)庫(kù)代碼

2009-09-14 13:30:04

Linq數(shù)據(jù)和對(duì)象

2021-06-29 06:25:22

Nest.jsTypeORM數(shù)據(jù)庫(kù)

2009-09-08 15:19:52

Linq Where操

2016-05-11 10:09:49

數(shù)據(jù)層代碼FastQuery

2023-08-08 07:47:55

編程語(yǔ)言MongoDB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: xxx.在线观看| 看片91 | 在线观看av网站 | 国产激情视频在线免费观看 | 久久黄网| 伊人伊人网 | 久久久久国产一区二区三区 | 伊人一二三 | 精品国产乱码 | 成年免费大片黄在线观看一级 | 天天曰天天干 | 麻豆国产一区二区三区四区 | 欧美一级大片 | 老司机午夜性大片 | 国产网站在线免费观看 | 2019精品手机国产品在线 | 国产色黄 | 99精品一级欧美片免费播放 | 亚洲成人蜜桃 | 免费国产一区二区 | 久久久999精品 | 国产中文原创 | 在线成人一区 | 日韩成人在线观看 | 91精品国产91久久久久久吃药 | 黄色三级免费网站 | 中国一级大毛片 | 中文区中文字幕免费看 | 97国产一区二区精品久久呦 | 日韩中文字幕在线观看 | 精品久久久久国产免费第一页 | 粉嫩高清一区二区三区 | 欧美在线视频观看 | 一区二区三区高清在线观看 | 国产超碰人人爽人人做人人爱 | 久久不射网| 日韩一区二区三区在线 | 一道本一区二区 | 国产福利91精品 | 美女操网站 | 中文字幕一区二区三区四区五区 |