LINQ匿名类型的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
下面的示例提供了一个更复杂和更实际的场景。它把我们的城市列表转换成一个分层的结果集合──我们将使用一个LINQ匿名类型来对结果按国家分组,这个LINQ匿名类型包含了一个国家名称,一个城 市详细信息的子集合和在这个国家中所有城市距离的总和,这距离之和将通过第五步中示范过的lambda表达式 来计算:
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是这样定义的:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Step7.aspx.cs" Inherits="Step7" %>
<html>
<body>
<form id="form1" runat="server">
<div>
<h2>Groupings with Anonymous Classes</h2>
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField HeaderText="Country" DataField="Country" />
<asp:TemplateField HeaderText="Cities">
& nbsp;<ItemTemplate>
& nbsp;
& nbsp;<asp:BulletedList ID="BulletedList1" runat="server"
& nbsp; & nbsp;DataSource='<%#Eval("Cities")%>' DataValueField="City"/>
& nbsp;
& nbsp;</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Total Distance" DataField="TotalDistance" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
注意,我在GridView的模版列中添加了一个"Cities"列,并且在其中添加了一个<asp:bulletedlist>控件 (一个新的ASP.NET 2.0自带控件)来绑定在上面用LINQ查询所得到的分层结果。
注意,所有上面的绑定语法和层次绑定在现在的ASP.NET 2.0中是完全支持的,所以,你可以在现有的程序中使 用这些技术。新颖(我也认为非常酷)之处,是LINQ匿名类型和LINQ提供的数据构形功能,这个功能使得在ASP.NET 控件里绑定分层数据非常容易。
上面所有的例子操作的都是本地内存中的集合数据。他们展示了你如何在.NET对象模型中使用LINQ,包括那些你 自己创建的类型。
在我将来的有关LINQ的文章中,我将深入讨论LINQ,利用新的DLINQ支持使用上面提到的技术来处理关系数据库 ,和通过新的XLINQ支持来处理XML文件和结构。LINQ项目的好处在于,在所有的应用中,其句法和概念都是一 样的,这样,你一旦学会使用LINQ对一个数组或集合做查询,你也就知道了在处理数据库甚至XML文件时所需 的所有概念。
例如,假如你使用DLINQ生成了Northwinds数据库中供应商(Suppliers)和产品( Products)表相对应的.NET类型(注:你不需要编写任何代码就可以实现),那么要获取分层的数据结果,并且将其绑定到GridView上,你只要写下面这个编码就可以了(注意:我们使用了跟前面的例子一样的数据构形技术,只从数据库中取得两列数据,并且自动地把每个供应商和其对应的产品组合成一个层次结构的结 果):
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语句和代码──这些就是实现高效获取和组装层次数据所需的所有代码(注意:只取出了需要的 列和行的数据-DLINQ可以使用LINQ的远程函数支持因而我们没必要持久化或者取出所有数据库表或者一行中 的所有列)。而且这些都是类型安全的,同样具有完全的编译时检查,智能感知和调试支 持。
关于LINQ匿名类型的作用是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。