首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Linq to Entity返回匿名类型List作为Repeater控件的数据源有关问题

2013-12-10 
Linq to Entity返回匿名类型List作为Repeater控件的数据源问题有这样一个问题,我有表Newsletter表,该表中

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%>是好使的


 protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.DataSource = GetOldYears().Select(t=>t.Year).Distinct().OrderByDescending(y=> y).ToList() ;
            Repeater1.DataBind();

        }

        public List<DateTime> GetOldYears()
        {
            return new List<DateTime>()
                {
                    new DateTime(2001, 3,4),
                    new DateTime(2003, 4,4),
                    new DateTime(2005, 3,2),
                    new DateTime(2010, 3,4),
                    new DateTime(2003, 3,4),

                };
        }



<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
               <ItemTemplate>


                   <asp:Label ID="lblYear" runat="server" Text='<%#Container.DataItem%>'></asp:Label>
               </ItemTemplate>
        </asp:Repeater>



出了函数,匿名类就不能被访问了,你还的定义一个类,其成员是Year,函数中返回这个类。

热点排行