【问题标题】:Group list by specific field按特定字段分组列表
【发布时间】:2013-12-10 15:55:27
【问题描述】:

我想显示按日期分组的课程列表。 我已经尝试了几件事,但我认为下面的代码是我最好的尝试。 虽然还是不行。

Public Function showSchedule(ByVal driver As Integer, month As Integer) As List(Of tbl_lesson)
    Dim result = From lesson In dc.tbl_lesson
                 Order By lesson.fk_calendar
                 Join c In dc.tbl_calendars On c.pk_calendar Equals lesson.fk_calendar
                 Join ls In dc.tbl_lessonseries On ls.pk_tbl_lessonseries  Equals  lesson.fk_tbl_lessonseries 
                 Join ts In dc.tbl_timeslots On ts.pk_timeslot Equals lesson.fk_timeslot
                 Where ls.fk_employee = Convert.ToInt16(driver) And c.month = month
                 Group lesson By lesson.fk_calendar Into grp = Group
                 Select grp

    Return result
End Function

提前感谢您的帮助! 詹尼克

【问题讨论】:

  • 那么您当前的尝试到底有什么问题? lession.fk_calendar 应该是您要分组的日期字段吗?
  • 嗨,杰斯,确实。我正在尝试按 course.fk_calendar (包含唯一日期)对放入 gridview 的记录进行分组。但是,当我触发使用上述功能填充网格视图的按钮(“显示计划”)时,它不会显示任何内容。如果我将 group by 放在上述函数的注释中,则按钮会触发。所以这个组有问题

标签: asp.net vb.net linq


【解决方案1】:

当你按一个值分组时,你会得到一个IGrouping<TKey, TElement>,它本质上是一个集合的集合(由键值分隔),但你的函数试图返回一个tbl_lesson 值的平面列表。

如果您尝试通过键值获取 不同 列表,那么您可以从每个组中提取第一个值:

Return result.Select(g => g.First()).ToList();  // will return a list of tbl_lesson items

如果你只想按键值排序,那么只需取出分组即可:

Dim result = From lesson In dc.tbl_lesson
             Order By lesson.fk_calendar
             Join c In dc.tbl_calendars On c.pk_calendar Equals lesson.fk_calendar
             Join ls In dc.tbl_lessonseries On ls.pk_tbl_lessonseries  Equals  lesson.fk_tbl_lessonseries 
             Join ts In dc.tbl_timeslots On ts.pk_timeslot Equals lesson.fk_timeslot
             Where ls.fk_employee = Convert.ToInt16(driver) And c.month = month
             Select grp

Return result.ToList()

【讨论】:

  • 感谢 D 斯坦利! .First 对我来说效果很好!
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 2012-10-28
  • 2017-05-06
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2021-09-11
  • 2015-03-16
相关资源
最近更新 更多