溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LINQ匿名類型的作用是什么

發(fā)布時(shí)間:2021-08-10 17:57:14 來源:億速云 閱讀:149 作者:Leah 欄目:編程語言

LINQ匿名類型的作用是什么,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

下面的示例提供了一個(gè)更復(fù)雜和更實(shí)際的場景。它把我們的城市列表轉(zhuǎn)換成一個(gè)分層的結(jié)果集合──我們將使用一個(gè)LINQ匿名類型來對結(jié)果按國家分組,這個(gè)LINQ匿名類型包含了一個(gè)國家名稱,一個(gè)城 市詳細(xì)信息的子集合和在這個(gè)國家中所有城市距離的總和,這距離之和將通過第五步中示范過的lambda表達(dá)式 來計(jì)算:

using System;  using System.Web.UI;  using System.Query;     public partial class Step7 : System.Web.UI.Page  {  protected void Page_Load(object sender, EventArgs e)  {  TravelOrganizer travel = new TravelOrganizer();     GridView1.DataSource = from location in travel.PlacesVisited  & nbsp; group location by location.Country into loc  & nbsp; select new {  & nbsp; & nbsp; Country = loc.Key,  & nbsp; & nbsp; Cities = loc,  & nbsp; & nbsp; TotalDistance = loc.Sum(dist => dist.Distance)  & nbsp; };   GridView1.DataBind();  }  }

我們.aspx頁面中的GridView是這樣定義的:

  1. <%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="Step7.aspx.cs" Inherits="Step7" %> 

  2.    

  3. <html> 

  4. <body> 

  5. <form id="form1" runat="server"> 

  6. <div> 

  7. <h2>Groupings with Anonymous Classes</h2> 

  8.    

  9. <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server"> 

  10. <Columns> 

  11.    

  12. <asp:BoundField HeaderText="Country" DataField="Country" /> 

  13.    

  14. <asp:TemplateField HeaderText="Cities"> 

  15. & nbsp;<ItemTemplate> 

  16. & nbsp;   

  17. & nbsp;<asp:BulletedList ID="BulletedList1" runat="server" 

  18. & nbsp; & nbsp;DataSource='<%#Eval("Cities")%>' DataValueField="City"/> 

  19. & nbsp;   

  20. & nbsp;</ItemTemplate> 

  21. </asp:TemplateField> 

  22.    

  23. <asp:BoundField HeaderText="Total Distance" DataField="TotalDistance" /> 

  24.    

  25. </Columns> 

  26. </asp:GridView> 

  27. </div> 

  28. </form> 

  29. </body> 

  30. </html> 

注意,我在GridView的模版列中添加了一個(gè)"Cities"列,并且在其中添加了一個(gè)<asp:bulletedlist>控件 (一個(gè)新的ASP.NET 2.0自帶控件)來綁定在上面用LINQ查詢所得到的分層結(jié)果。

注意,所有上面的綁定語法和層次綁定在現(xiàn)在的ASP.NET 2.0中是完全支持的,所以,你可以在現(xiàn)有的程序中使 用這些技術(shù)。新穎(我也認(rèn)為非??幔┲?,是LINQ匿名類型和LINQ提供的數(shù)據(jù)構(gòu)形功能,這個(gè)功能使得在ASP.NET 控件里綁定分層數(shù)據(jù)非常容易。

上面所有的例子操作的都是本地內(nèi)存中的集合數(shù)據(jù)。他們展示了你如何在.NET對象模型中使用LINQ,包括那些你 自己創(chuàng)建的類型。

在我將來的有關(guān)LINQ的文章中,我將深入討論LINQ,利用新的DLINQ支持使用上面提到的技術(shù)來處理關(guān)系數(shù)據(jù)庫 ,和通過新的XLINQ支持來處理XML文件和結(jié)構(gòu)。LINQ項(xiàng)目的好處在于,在所有的應(yīng)用中,其句法和概念都是一 樣的,這樣,你一旦學(xué)會(huì)使用LINQ對一個(gè)數(shù)組或集合做查詢,你也就知道了在處理數(shù)據(jù)庫甚至XML文件時(shí)所需 的所有概念。

例如,假如你使用DLINQ生成了Northwinds數(shù)據(jù)庫中供應(yīng)商(Suppliers)和產(chǎn)品( Products)表相對應(yīng)的.NET類型(注:你不需要編寫任何代碼就可以實(shí)現(xiàn)),那么要獲取分層的數(shù)據(jù)結(jié)果,并且將其綁定到GridView上,你只要寫下面這個(gè)編碼就可以了(注意:我們使用了跟前面的例子一樣的數(shù)據(jù)構(gòu)形技術(shù),只從數(shù)據(jù)庫中取得兩列數(shù)據(jù),并且自動(dòng)地把每個(gè)供應(yīng)商和其對應(yīng)的產(chǎn)品組合成一個(gè)層次結(jié)構(gòu)的結(jié) 果):

using System;  using System.Query;     public partial class Data_Data2 : System.Web.UI.Page  {  protected void Page_Load(object sender, EventArgs e)  {  Northwind db = new Northwind();     GridView1.DataSource = from x in db.Suppliers  & nbsp; where x.Country == "USA"  & nbsp; orderby x.Country  & nbsp; select new {  & nbsp; & nbsp;x.CompanyName,  & nbsp; & nbsp;x.Country,  & nbsp; & nbsp;x.Products  & nbsp;};     GridView1.DataBind();  }  }

不需要額外的SQL語句和代碼──這些就是實(shí)現(xiàn)高效獲取和組裝層次數(shù)據(jù)所需的所有代碼(注意:只取出了需要的 列和行的數(shù)據(jù)-DLINQ可以使用LINQ的遠(yuǎn)程函數(shù)支持因而我們沒必要持久化或者取出所有數(shù)據(jù)庫表或者一行中 的所有列)。而且這些都是類型安全的,同樣具有完全的編譯時(shí)檢查,智能感知和調(diào)試支 持。

關(guān)于LINQ匿名類型的作用是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI