Tôi có này hai thực thể:Phân nhóm và nhiều orderings sử dụng LINQ to Entities
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; }
}
Bây giờ tôi cần phải liệt kê từng nhóm Class bằng cách Course và ra lệnh bằng (giảm dần) Course.StartDate sau đó bởi Class.StartTime. tôi có thể nhận được vào nhóm của khóa học và trật tự bởi Course.StartDate:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
Nhưng không thể quản lý để còn ra lệnh cho mỗi lớp bởi nó StartTime. Tôi cố gắng này:
var myList = context.Classes
.OrderBy(c => c.StartTime)
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
Và ngay cả điều này:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate)
.ThenBy(g => g.Select(c => c.StartTime)).ToList()
Nhưng Lớp học không bao giờ được ra lệnh bởi nó StartTime.
* Chỉnh sửa để làm rõ hơn: Điều này dành cho WebService và tôi phải trả lại List<IGrouping<Course, Class>>
và tôi thực sự muốn một cách thanh lịch để thực hiện việc này (tức là chỉ sử dụng LINQ) mà không cần tạo danh sách theo cách thủ công. Trừ khi nó không thể tất nhiên.
Bất kỳ trợ giúp nào đều được đề xuất (tôi đang sử dụng mã đầu tiên là 4,3 btw của EF).
Đây có lẽ là đặt cược tốt nhất của bạn 'ToLookup' trả về một' ILookup ', thực hiện' IEnumerable > ', có nghĩa là bạn có thể chuyển nó tới webservice (bạn có thể phải truyền nó, nhưng đó không phải là vấn đề). –
SPFiredrake
Tôi đã giải quyết nó với một cách giải quyết hackish, nhưng điều này là thanh lịch hơn nhiều. –