【发布时间】:2019-09-26 09:55:56
【问题描述】:
我正在尝试确定一种使用 Linq 在 IQueryable 中的方法,以根据一系列值将实体“扩展”为多个查询结果。具体来说,将结果按开始日期和结束日期之间的每一天(包括日期)展开。
以下是关注的实体(为了清晰起见,已精简并删除了注释):
public class Location {
public int Id { get; set; }
public string Name { get; set; }
}
public class WorkAssignment {
public int Id { get; set; }
public string Name { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public virtual Location Location { get; set; }
public int LocationId { get; set; }
}
例如,假设我们有:
地点:
Id Name
1 Habitat
2 Church
工作分配:
Id Name Start End LocationId
1 Jim 29-Apr-2019 3-May-2019 1
2 Natasha 4-May-2019 7-May-2019 2
3 Jennifer 5-May-2019 6-May-2019 2
我想使用 Linq 获得以下内容,最好使用流畅的接口方法。在查询中执行“扩展”很重要(让数据库负责)。完整的数据集和引用的实体很大,我不希望使用.ToList() 和foreach 语句实现。
WorkerName Date LocationId LocationName
Jim 29-Apr-2019 1 Habitat
Jim 30-Apr-2019 1 Habitat
Jim 1-May-2019 1 Habitat
Jim 2-May-2019 1 Habitat
Jim 3-May-2019 1 Habitat
Natasha 4-May-2019 2 Church
Natasha 5-May-2019 2 Church
Natasha 6-May-2019 2 Church
Natasha 7-May-2019 2 Church
Jennifer 5-May-2019 2 Church
Jennifer 6-May-2019 2 Church
最终目标是获得上述“扩展”,以便按位置分组(按位置名称排序)然后按日期分组(按升序排列),然后按名称分组,为工人提供签到表。登录表按位置分组,然后按日期分组。每张表都会列出特定日期特定地点的工人。
我已经弄清楚了分组查询(感谢 Jon Skeet 和他所有很棒的 SO 答案)。如果可以在 IQueryable 内进行,我只需要上述扩展方面的帮助。
【问题讨论】:
标签: c# entity-framework linq iqueryable fluent