<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table border="1" align="center">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("CustomerID")%>
</td>
<td>
<%# Eval("Country") %>
</td>
<td>
<%# Eval("Count") %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></FooterTemplate>
</asp:Repeater>
上面所写的是用的Repeater绑定后所显示的简单页面显示,数据库选择的是NorthWind里的customers和orders表,使用vs工具自动生成linq to sql实体类,可以看到只在前台显示了3条数据库记录。
现在写后台代码,其实原本打算这里是用来做测试的,希望可以用不创建新实体类的方式,来返回联表查询时,创建的匿名类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;
using System.Data.Linq.SqlClient;
namespace LinqLoadWithDemo
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var list = ReturnTest();
//GridView1.DataSource = list;
//GridView1.DataBind();
Repeater1.DataSource = list;
Repeater1.DataBind();
}
protected IQueryable ReturnTest()
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var cus = dc.GetTable<Customers>();
var ord = dc.GetTable<Orders>();
var list = cus.GroupJoin(ord, c => c.CustomerID, o => o.CustomerID, (o, c)=>new {CustomerID=o.CustomerID,Country=o.Country,Count=c.Count()});
return (IQueryable)list;
}
}
}
本人水平所限,所以只能测试了这一点东西,可以看到,原本匿名的list,只要在返回前转换成IQueryable接口类型的,就可以在其他函数里调用这个返回的结果了。
当然了,这里用来直接绑定Repeater控件是可以如此使用的,并且此方式严格来说并不是返回匿名类型,只是返回了实现了继承IQueryable接口的类型,不过对于不需要另行创建实体类的方式来说,可能会方便一些,当然了效率和其他一些因素,这里并没有考虑,只是提供了一种方式。