日期:2014-05-17  浏览次数:20964 次

Linq to Entity返回匿名类型List作为Repeater控件的数据源问题
有这样一个问题,我有表Newsletter表,该表中有一个Published字段
Published
2013-11-01
2013-11-01
2013-10-01
2013-09-01
2012-11-01
2012-10-01
2012-09-01
2011-10-01
2011-09-01

我现在要返回不重复的年数,绑定到1个Repeater控件repeater1,该控件的ItemTemplate中放一个label, Label的Text就是此年份。我两种方法都有问题:

第一种方法:
 public List<int> GetOldYears()
        {
          return EntitySet.Select(t => t.Published.Year).Distinct().OrderByDescending(y => y).ToList();
         }
         
         this.repeater1.DataSource = GetOldYears();
         this.repeater1.DataBind()
问题在于前台页面
      <asp:Repeater ID="repOldYearNews" runat="server"> 
              <ItemTemplate>
 <asp:Label ID="lblYear" runat="server" Text='<%#Container.DataItem%>'></asp:Label>
               </ItemTemplate>
            </asp:Repeater>

本来应该用Eval<%#""%方法,但是由于返回的是Published.Year,并不是数据库中字段,没有对应名称,所以无法使用。但是这里Container.DataItem什么也取不出来。

我于是想到给他取一个名称,改为:

 public List<int> GetOldYears()
        {
          return EntitySet.Select(t => new{ year =t.Published.Year}).Distinct().OrderByDescending(y => y).ToList();
         }
这里倒是用匿名类型取了一个名字year,,前台按道理就可以改为
 <asp:Repeater ID="repOldYearNews" runat="server"> 
              <ItemTemplate>
 <asp:Label ID="lblYear" runat="server" Text='<%#Eval("year")%>'></asp:Label>
               </ItemTemplate>
            </asp:Repeater>


但是这个GetOldYears()方法就报错,因为返回的是匿名类型的list,而不是List<int>,也无法弄

不知道各位前辈高手遇到这种问题,应该如何解决?? 

Repeater控件在前台绑定时需要用到一个字段名称,而后台代码又无法取到一个字段名称



------解决方案--------------------
我这里<%#Container.DataItem%&