【问题标题】:Grouping by date period name in Entity Framework在实体框架中按日期期间名称分组
【发布时间】:2014-12-11 10:37:11
【问题描述】:

我有带日期时间的表? “到期”列。我正在尝试按此列对所有行进行分组。

 var groupBy = new Expression<Func<MyEntity, DateTime?>>(t => t.DueOn);
 var groups = sequence.GroupBy(groupBy).ToList();

一切正常。但我想以以下形式分组:

昨天 今天 明天 有一天如果可以为空

我看到的一种方法是遍历结果中的列表,比较 DueOn 并将项目复制到具有上述组的另一个列表。

但也许有更有效的解决方案?

谢谢

【问题讨论】:

  • 试试这个:var groups = sequence.GroupBy(groupBy).Orderby(groupBy).ToList();
  • 日期是否只包含昨天、今天和明天并且为空?
  • 不,我想将过去的日期称为过期,以及未来的日期。我只举了4个例子。

标签: c# .net entity-framework group-by


【解决方案1】:

在不创建显式表达式对象的情况下,将日期分组到预定时间段的方法如下:

dates.GroupBy(da => da.HasValue
                    ? da.Value.Date > DateTime.Today.AddDays(1)
                        ? "Future"
                        : da.Value.Date > DateTime.Today
                            ? "Tomorrow" 
                            :  da.Value.Date == DateTime.Today
                                ? "Today" 
                                : da.Value.Date == DateTime.Today.AddDays(-1)
                                    ? "Yesterday"
                                    : "Overdue"
                    : "Some day")

当然,您可以将整个表达式存储在groupBy 变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多