【问题标题】:group by with linq bind to repeatergroup by 与 linq 绑定到中继器
【发布时间】:2011-11-15 21:10:36
【问题描述】:

我有这个问题:

 public static Object GetEventsByMonth()
{
    DataClassesDataContext db = new DataClassesDataContext();
    var eventsByMonth = (from e in db.Events
            group e by e.StartDate.Value.Month into g
                         select new { Month = g.Key});

    return eventsByMonth;
}

绑定到中继器:

rptMonth.DataSource = EventsQ.GetEventsByMonth();
    rptMonth.DataBind();

我不明白为什么它不让我显示月份:

<%# Eval("Month")%>

上面写着:System.Web.HttpException: DataBinding: 'Event' does not contain a property with the name 'Month'.

我不想直接显示事件的属性,但我想显示月份...

您能建议一个解决方法吗?

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

    这是我的错:

    • 我在其中有另一个嵌套中继器,我试图在子中继器中访问月份,这当然不起作用。

    【讨论】:

      【解决方案2】:

      您不能在创建它的方法之外使用匿名类型,这可能就是您遇到此问题的原因。尝试以创建 LINQ 对象的相同方法绑定转发器:

      DataClassesDataContext db = new DataClassesDataContext(); 
      
      var eventsByMonth = from e in db.Events 
                          group e by e.StartDate.Value.Month into g 
                          select new 
                          { 
                              Month = g.Key
                          }; 
      
      repeater1.DataSource = eventsByMonth;
      repater1.DataBind();
      

      你可以做的是创建一个类:

      public class SomeClass
      {
          public int Month { get; set; }
      }
      
      var db = new DogDataContext(ConnectString);
      var result = from e in db.Events 
                   group e by e.StartDate.Value.Month into g
                   select new SomeClass()
                   {
                       Month = g.Key
                   };
      
      return result;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多