我可以为您翻译以下内容,这是两个实体:
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual ICollection<Class> Classes { get; set; }
}
public class Class
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; } ]
public Course Course { get; set; }
}
现在我需要按课程分组并按(降序)课程开始日期,然后按班级开始时间排序。我可以按课程分组并按Course.StartDate排序:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
但是我无法按照每个类的开始时间进行排序。我尝试过以下方法:
var myList = context.Classes
.OrderBy(c => c.StartTime)
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
甚至还有这个:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate)
.ThenBy(g => g.Select(c => c.StartTime)).ToList()
但是班级永远不会按照它们的开始时间排序。
*更好的解释:
这是一个 WebService,我必须返回一个 List<IGrouping<Course, Class>>
,我真的希望有一种优雅的方式来做到这一点(即只使用 Linq),而不是手动创建列表。当然,除非不可能。
任何帮助都将不胜感激(顺便说一句,我正在使用 EF code-first 4.3)。
List<IGrouping<Course, Class>>
。这是一个 WebService,我无法修改消费者。否则,我只需在客户端上执行foreach (var class in group.OrderBy(c => c.StartTime)
,但很遗憾我不能这样做。 - Henrique Miranda