【问题标题】:how do i use group by only on date from datetime in LINQ query我如何在 LINQ 查询中仅在日期时间的日期上使用 group by
【发布时间】:2015-05-13 13:22:50
【问题描述】:

我有这个 LINQ 查询

var data = (from orders in db.Orders
        group orders by orders.OrderDate into dateGroup
        select new OrderDateGroup()
        {
            OrderDate = dateGroup.Key,
            OrderCount = dateGroup.Count()
        }).Take(10);

orders.OrderDate 是 DateTime,但我只想根据 Date 进行分组

【问题讨论】:

  • 您使用的是哪种 LINQ,db 是什么?是 Linq-To-SQL、Linq-To-Entities、Linq-To-DataSet、Linq-To-Objects 吗?如果是 L2Objects,您可以简单地使用 group orders by orders.OrderDate.Date

标签: c# asp.net linq date datetime


【解决方案1】:

您可以通过获取 DateTime 的日期来尝试以下代码(我不确定它是否适用于 LINQ to Entities):

var data = (from orders in db.Orders
        group orders by orders.OrderDate.Date into dateGroup
        select new OrderDateGroup()
        {
            OrderDate = dateGroup.Key,
            OrderCount = dateGroup.Count()
        }).Take(10);

【讨论】:

  • 这不起作用兄弟..我已经尝试过了..无论如何谢谢:)
【解决方案2】:

您可以使用规范函数:

group orders by EntityFunctions.TruncateTime(orders.OrderDate) into dateGroup

其他信息:

EntityFunctions 方法称为规范函数。这些是一组功能,所有实体框架提供者都支持这些功能。这些规范函数将被转换为提供者的相应数据源功能。规范函数是访问核心语言之外的功能的首选方式,因为它们保持查询的可移植性。

您可以找到所有规范函数 here 以及所有日期和时间规范函数 here

另外,不要忘记包含来自System.Data.Entity.dllSystem.Data.Objects namepsace。

注意:
如果您使用的是 EF6,那么您必须考虑将 EntityFunctions 更改为 DbFunctions。并且不要忘记包含来自EntityFramework.dllSystem.Data.Entity namepsace。

【讨论】:

  • 是的,我正在尝试规范函数..但我不知道它在哪个命名空间中可用..我正在使用 entityframework 6.0,你能帮忙吗
  • @Shri 据我所知,在 EF6 中,他们已将 EntityFunctions 替换为 DbFunctions。检查一下。
  • 是的!那行得通..谢谢兄弟:)实际上我是新手..再次感谢并祝一切顺利:)
  • @Shri 很高兴为您提供帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2012-01-11
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多