日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一體化查詢語言LINQ的操作詳解

我們知道,一體化查詢語言LINQ,即(NET Language Integrated Query),是集成在 .NET Framework 3.5 編程語言中的一種新特性,已成為編程語言的一部分,使開發(fā)人員可以使用語法基本一致的語句對(duì)不同來源不同類型的數(shù)據(jù)進(jìn)行查詢與整合,它使得查詢表達(dá)式可以得到很好的編譯時(shí)語法檢查。

成都創(chuàng)新互聯(lián)專注于東臺(tái)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。東臺(tái)網(wǎng)站建設(shè)公司,為東臺(tái)等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

一:字符串查詢

 
 
 
 
  1. string strLinq = "Hello World!";  
  2.  
  3. var result = from q in strLinq select q;  
  4.  
  5. var result1 = from q in strLinq where q == 'o' select q;  
  6.  
  7. // Linq 的擴(kuò)展方法  
  8.  
  9. var result2 = strLinq.Where(q => q == 'o');  
  10.  
  11. var result3 = Enumerable.Where(strLinq, q => q == 'o'); 

二:數(shù)組查詢

 
 
 
 
  1. string[] strs ={ "Suyama", "Fuller", "Callahan", "Michael", "Janet" };  
  2.  
  3. var result = from p in strs where p.Length > 5 select p;  
  4.  
  5. var result1 = strs.Where(p => p.Length>5);  
  6.  
  7. var result2 = strs.Where(p =>p.StartsWith("C")); 

三:XML 查詢

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5. Davolio 
  6.  
  7. 507 - 20th Ave. E. Apt. 2A
     
  8.  
  9.  
  10.  
  11.  
  12.  
  13. Andrew 
  14.  
  15. 4110 Old Redmond Rd.
     
  16.  
  17.  
  18.  
  19.  
  20.  
  21. Laura 
  22.  
  23. Coventry House Miner Rd.
     
  24.  
  25.  
  26.  
  27.  
  28.  
  29. Anne 
  30.  
  31. 4726 - 11th Ave. N.E.
     
  32.  
  33.  
  34.  
  35.  
  36.  
  37. King 
  38.  
  39. 7 Houndstooth Rd.
     
  40.  
  41.  
  42.  
  43.  
  44.  
  45. XElement root = XElement.Load("D:\\Employees.xml");  
  46.  
  47. // 查詢性別為男性(gender=1)的全部員工  
  48.  
  49. var emps = from s in root.Elements("Employee")  
  50.  
  51. where s.Attribute("gender").Value == "1"  
  52.  
  53. select s;  
  54.  
  55. // 查詢性別為女性(gender=0)的員工的姓名和住址  
  56.  
  57. var emps1 = from s in root.Elements("Employee")  
  58.  
  59. where s.Attribute("gender").Value == "0"  
  60.  
  61. select new  
  62.  
  63. {  
  64.  
  65. name = s.Element("Name").Value,  
  66.  
  67. address = s.Element("Address").Value  
  68.  
  69. }; 

#p#

四:數(shù)據(jù)庫表查詢

其中用到的表的結(jié)構(gòu)以及數(shù)據(jù)大致為下圖所示:

(1) 單表查詢

 
 
 
 
  1. // <1> 查詢所有客戶  
  2.  
  3. var customers1 = from s in dc.Customers select s;  
  4.  
  5. List customerLst1 = customers1.ToList();  
  6.  
  7. // <2> 查詢國籍為 'Germany' 的客戶  
  8.  
  9. var customers2 = from s in dc.Customers where s.Country == "Germany" select s;  
  10.  
  11. List customerLst2 = customers2.ToList();  
  12.  
  13. List customerLst2_1 = (from s in dc.Customers where s.Country == "Germany" select s).ToList();  
  14.  
  15. List customerLst2_2 = dc.Customers.Where(s => s.Country == "Germany").ToList();  
  16.  
  17. // <3> 按公司名降序排列查詢員工ID和公司  
  18.  
  19. var customerLst3 = (from s in dc.Customers  
  20.  
  21. orderby s.CompanyName descending  
  22.  
  23. select new  
  24.  
  25. {  
  26.  
  27. ID = s.CustomerID,  
  28.  
  29. Company = s.CompanyName  
  30.  
  31. }).ToList();  
  32.  
  33. // <4> 查詢公司名,并判斷其長度是不是大于20  
  34.  
  35. var customerLst4 = (from s in dc.Customers  
  36.  
  37. select new  
  38.  
  39. {  
  40.  
  41. CompanyName = s.CompanyName,  
  42.  
  43. IsThan20 = (s.CompanyName.Length > 20) ? true : false  
  44.  
  45. }).ToList();  
  46.  
  47. // <5> 按順序查詢第10到20記錄的客戶  
  48.  
  49. List customerLst5 = (from s in dc.Customers select s).Skip(9).Take(11).ToList();  
  50.  
  51. // Skip(9): 跳過前9個(gè)  
  52.  
  53. // Take(11): 取前11條記錄  
  54.  
  55. // <6> 國籍為 Canada和USA的客戶  
  56.  
  57. var customerLst6 = from s in dc.Customers where new string[] { "Canada", "USA" }.Contains(s.Country) select s;  
  58.  
  59. // <7> 地址中有 '9'  
  60.  
  61. var customerLst7 = from s in dc.Customers where s.Address.Contains("9") select s;  
  62.  
  63. // <8> 地址以 'A' 開頭  
  64.  
  65. var customerLst8 = from s in dc.Customers where s.Address.StartsWith("A") select s;  
  66.  
  67. var customerLst8_1 = from s in dc.Customers where s.Address.IndexOf("A") == 0 select s;  
  68.  
  69. // <9> 地址以 'A' 開頭的客戶數(shù)量  
  70.  
  71. var customerLst9 = dc.Customers.Count(s => s.Address.IndexOf("A") == 0);  
  72.  
  73. // <10> 查詢最高、最低、平均、總共的付款  
  74.  
  75. var customerLst10 = dc.Customers.Select(s => s.Payment).Max();  
  76.  
  77. var customerLst10_1 = Enumerable.Select(dc.Customers, s => s.Payment).Max();  
  78.  
  79. var customerLst10_2 = dc.Customers.Select(s => s.Payment).Min();  
  80.  
  81. var customerLst10_3 = dc.Customers.Select(s => s.Payment).Average();  
  82.  
  83. var customerLst10_4 = dc.Customers.Select(s => s.Payment).Sum();  
  84.  
  85. // <11> 按國籍查詢客戶數(shù)量和最高付款  
  86.  
  87. var customerLst11 = (from s in dc.Customers  
  88.  
  89. group s by s.Country into p  
  90.  
  91. select new  
  92.  
  93. {  
  94.  
  95. Country = p.Key,  
  96.  
  97. Count = p.Count(),  
  98.  
  99. Payment = p.Max(g => g.Payment)  
  100.  
  101. }).ToList(); 

#p#

(2) 多表查詢

 
 
 
 
  1. // <1> 查詢每個(gè)客戶下訂單的日期 (內(nèi)連接)  
  2.  
  3. var customerLst1 = from s in dc.Customers  
  4.  
  5. join p in dc.Orders on s.CustomerID equals p.CustomerID  
  6.  
  7. orderby s.CustomerID ascending  
  8.  
  9. select new  
  10.  
  11. {  
  12.  
  13. ID = s.CustomerID,  
  14.  
  15. OrderDate = p.OrderDate  
  16.  
  17. };  
  18.  
  19. // <2> 查詢每個(gè)客戶下訂單的日期 (左外連接)  
  20.  
  21. var customerLst2 = from s in dc.Customers  
  22.  
  23. join p in dc.Orders on s.CustomerID equals p.CustomerID  
  24.  
  25. into sp from a in sp.DefaultIfEmpty()  
  26.  
  27. orderby s.CustomerID ascending  
  28.  
  29. select new  
  30.  
  31. {  
  32.  
  33. ID = s.CustomerID,  
  34.  
  35. OrderDate = a.OrderDate  
  36.  
  37. };  
  38.  
  39. // <3> 查詢每個(gè)客戶下訂單的日期,條件:付款大于200且訂單日期在1997-12-08以后 (多表?xiàng)l件查詢)  
  40.  
  41. var customerLst3 = from s in dc.Customers  
  42.  
  43. join p in dc.Orders on s.CustomerID equals p.CustomerID  
  44.  
  45. where s.Payment > 200 && p.OrderDate > DateTime.Parse("1997-12-08")  
  46.  
  47. orderby s.CustomerID ascending  
  48.  
  49. select new  
  50.  
  51. {  
  52.  
  53. ID = s.CustomerID,  
  54.  
  55. OrderDate = p.OrderDate  
  56.  
  57. }; 

實(shí)際操作起來,用linq進(jìn)行多表連接比較復(fù)雜(特別是在表很多的情況下),建議先將查詢內(nèi)容做成視圖,再把視圖映射成實(shí)體類,這樣就可以用單表查詢的方式進(jìn)行查詢了。

作者建議:LINQ在做對(duì)數(shù)據(jù)庫查詢的時(shí)候,其實(shí)就是對(duì)sql的再封裝,從而使得操作更加簡潔,而且從LINQ解析得到的sql也得到了優(yōu)化,可能針對(duì)某些查詢,比沒有優(yōu)化的sql查詢效率更高些,所以,如果開發(fā)人員追求效率(對(duì)數(shù)據(jù)的增、刪、改、查),建議先做存儲(chǔ)過程,然后優(yōu)化,再把這些優(yōu)化的存儲(chǔ)過程在DataContext里面封裝成方法,再調(diào)用這些方法,這樣既可以把sql寫的更好,效率又更高,而且還對(duì)提高個(gè)人的數(shù)據(jù)庫知識(shí)水平也有很大幫助。

關(guān)于一體化查詢語言LINQ的操作就介紹到這里了,希望通過本次的介紹能夠帶給您一些收獲,謝謝各位瀏覽!

【編輯推薦】

  1. SQL Server數(shù)據(jù)庫主鍵及復(fù)合主鍵的配置
  2. SQL SERVER 數(shù)據(jù)挖掘之理解內(nèi)容類型
  3. 使用SSMA將Oracle數(shù)據(jù)庫轉(zhuǎn)成SQL Server 2008
  4. SQL Server數(shù)據(jù)庫如何更改SA密碼和默認(rèn)端口號(hào)
  5. SQL Server引起CPU使用率是100%的常見原因及優(yōu)化方案

網(wǎng)站標(biāo)題:一體化查詢語言LINQ的操作詳解
鏈接分享:http://www.dlmjj.cn/article/coogdgh.html