LINQ匿名類型剖析
LINQ有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ匿名類型,包括介紹新建一個(gè)具有City和Distance 兩個(gè)屬性的LINQ匿名類型來實(shí)現(xiàn)等方面
LINQ匿名類型(Anonymous Types)
LINQ能夠利用的另一個(gè)C#和VB新特性之一就是對“LINQ匿名類型”的支持。這允許你不需明確聲明對象模型就能很容易地創(chuàng)建和使用內(nèi)聯(lián)的類型結(jié)構(gòu),因?yàn)轭愋涂梢酝ㄟ^數(shù)據(jù)的初始 化推斷出來。這在使用LINQ查詢“自定義構(gòu)形(custom shape)”數(shù)據(jù)時(shí)非常的有用。
例如,考慮這樣一個(gè)場景:你正在處理一個(gè)具有許多屬性的數(shù)據(jù)庫或者強(qiáng)類型的集合-但是你只關(guān)心其中少數(shù)的 幾個(gè)字段。與創(chuàng)建和處理整個(gè)類型相比,僅返回你所需要的字段將會更加有用些。我們來新建一個(gè)"step6.aspx"文件來實(shí)現(xiàn)以上操作:
- <%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Step6.aspx.cs" Inherits="Step6" %>- <html>
- <body>
- <form id="form1" runat="server">
- <div>
- <h1>Anonymous Type</h1>
- <asp:GridView ID="GridView1" runat="server">
- </asp:GridView>
- </div>
- </form>
- </body>
- </html>
在我們的后臺代碼文件中我們將編寫一個(gè)使用LINQ匿名類型的LINQ查詢,如下所示:
- using System;
- using System.Web.UI;
- using System.Query;
- public partial class Step6 : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- TravelOrganizer travel = new TravelOrganizer();
- GridView1.DataSource = from location in travel.PlacesVisited
- & nbsp; orderby location.City
- & nbsp; select new {
- & nbsp; & nbsp;City = location.City,
- & nbsp; & nbsp;Distance = location.Distance
- & nbsp; };
- GridView1.DataBind();
- }
- }
注意,我們并沒有像上面一樣從select子句中返回一個(gè)"location"對象,我們通過新建一個(gè)具有City和Distance 兩個(gè)屬性的LINQ匿名類型來實(shí)現(xiàn)。這兩個(gè)屬性的類型是根據(jù)它們初始化時(shí)賦與的值來自動確定的,在這里是一個(gè)是 string,另一個(gè)是int。
【編輯推薦】