如何根据一系列值“扩展” IQueryable 结果?

雅塞尔

我正在尝试确定一种IQueryable, 中使用 Linq的方法,以根据一系列值将实体“扩展”为多个查询结果。具体来说,在开始日期和结束日期之间每天扩展结果,包括。

以下是关注的实体(为了清楚起见,它们已被精简并删除了注释):

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 获得以下内容,最好使用流畅的界面方法。查询中执行“扩展”很重要(让 DB 负责)。完整的数据集和引用的实体很大,我不希望实现 using.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.

史蒂夫·派

一种解决方案是结合使用日历或日期维度表(https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/)以代表您的日期范围以返回代表该范围内每个日期的实体。

例如:

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; }
}

[Table("vwWorkAssignmentByDate")]
public class WorkAssignmentDate 
{
    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; }
    public DateTime Date { get; set; }
}

请注意,WorkAssignmentDate 不会扩展 WorkAssignment。这样做的原因是,如果您扩展它,当直接查询 WorkAssignment 时,EF 将尝试 NOT IN 反对视图,这既是性能接收器,也可能在尝试加载单行时导致问题。(可能有某种形式的映射可以避免这种行为)您可以将 Id 设置为基于视图的实体的 PK 以使 EF 满意,但它不会是唯一的行标识符。(所以没有更新!不是问题,因为无论如何这是从视图中获取的)

其中 vwWorkAssignment 是将 WorkAssignment 连接到 DateDimension 表的视图:

SELECT wa.*, dd.Date
FROM dbo.WorkAssignment wa 
INNER JOIN dbo.DateDimension dd 
  ON dd.Date >= wa.StartDate AND dd.Date <= wa.EndDate

WorkAssignmentDate 实体需要被视为只读实体。要更新工作分配,您将按 ID 加载和使用 WorkAssignment 实体。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据vba中的单元格值生成一系列数字并水平显示结果?

来自分类Dev

如何顺序处理一系列AJAX请求的结果?

来自分类Dev

如何从IQueryable <IQueryable <T >>获取IQueryable <T>?

来自分类Dev

如何从一系列结果计算excel中的完成率

来自分类Dev

如何将 IQueryable/IEnumerable 结果转换为自定义模型 C# EntityFramework

来自分类Dev

IQueryable <T>与List <T>给出的结果不同

来自分类Dev

IQueryable包含未给出正确的结果

来自分类Dev

如何将一系列的(例如)熊猫groupby.apply(f)的结果放入数据框的新列中?

来自分类Dev

如何返回IQueryable?

来自分类Dev

如何过滤 IQueryable?

来自分类Dev

从Node.Js中的一系列回调函数返回结果

来自分类Dev

显示一系列日期的有效结果数

来自分类Dev

通过条件和R中的相关结果生成一系列时间戳记

来自分类Dev

PostgreSQL函数对当前记录执行一系列操作,然后返回结果

来自分类Dev

从Node.Js中的一系列回调函数返回结果

来自分类Dev

显示一系列日期的有效结果数

来自分类Dev

用C#构建一系列验证结果的N个深度结构

来自分类Dev

“ IQueryable”上“ Take()”之后的“ Count()”返回错误结果吗?

来自分类Dev

将动态形状的查询结果转换为IEnumerabale或IQueryable

来自分类Dev

Linq to Entities iQueryable筛选器基于筛选结果

来自分类Dev

groupby +将结果应用到同时出现在索引和列中的一系列内容中-如何防止呢?

来自分类Dev

可查询的IQueryable扩展方法

来自分类Dev

一系列printfs中的第一个printf()出现故障,返回不可预测的结果

来自分类Dev

如何根据多索引定义的范围对一列中的一系列值求和

来自分类Dev

在另一个 IQueryable 中使用 IQueryable

来自分类Dev

如何创建 IQueryable 版本的 IEnumerable 扩展方法?

来自分类Dev

在一系列部分重复的行上有条件地选择列和组结果

来自分类Dev

以特定顺序生成随机数(符合方程式)以产生一系列特定结果

来自分类Dev

TypeScript可变参数元组类型推断问题,针对运行一系列“结果”返回函数的函数

Related 相关文章

  1. 1

    如何根据vba中的单元格值生成一系列数字并水平显示结果?

  2. 2

    如何顺序处理一系列AJAX请求的结果?

  3. 3

    如何从IQueryable <IQueryable <T >>获取IQueryable <T>?

  4. 4

    如何从一系列结果计算excel中的完成率

  5. 5

    如何将 IQueryable/IEnumerable 结果转换为自定义模型 C# EntityFramework

  6. 6

    IQueryable <T>与List <T>给出的结果不同

  7. 7

    IQueryable包含未给出正确的结果

  8. 8

    如何将一系列的(例如)熊猫groupby.apply(f)的结果放入数据框的新列中?

  9. 9

    如何返回IQueryable?

  10. 10

    如何过滤 IQueryable?

  11. 11

    从Node.Js中的一系列回调函数返回结果

  12. 12

    显示一系列日期的有效结果数

  13. 13

    通过条件和R中的相关结果生成一系列时间戳记

  14. 14

    PostgreSQL函数对当前记录执行一系列操作,然后返回结果

  15. 15

    从Node.Js中的一系列回调函数返回结果

  16. 16

    显示一系列日期的有效结果数

  17. 17

    用C#构建一系列验证结果的N个深度结构

  18. 18

    “ IQueryable”上“ Take()”之后的“ Count()”返回错误结果吗?

  19. 19

    将动态形状的查询结果转换为IEnumerabale或IQueryable

  20. 20

    Linq to Entities iQueryable筛选器基于筛选结果

  21. 21

    groupby +将结果应用到同时出现在索引和列中的一系列内容中-如何防止呢?

  22. 22

    可查询的IQueryable扩展方法

  23. 23

    一系列printfs中的第一个printf()出现故障,返回不可预测的结果

  24. 24

    如何根据多索引定义的范围对一列中的一系列值求和

  25. 25

    在另一个 IQueryable 中使用 IQueryable

  26. 26

    如何创建 IQueryable 版本的 IEnumerable 扩展方法?

  27. 27

    在一系列部分重复的行上有条件地选择列和组结果

  28. 28

    以特定顺序生成随机数(符合方程式)以产生一系列特定结果

  29. 29

    TypeScript可变参数元组类型推断问题,针对运行一系列“结果”返回函数的函数

热门标签

归档