【问题标题】:Returning dates without times in a LINQ query在 LINQ 查询中返回没有时间的日期
【发布时间】:2010-09-14 19:26:24
【问题描述】:

我正在编写一个查询,我想计算按日期联系我们的呼叫中心的次数。似乎很容易,但由于联系日期字段是日期时间字段,我得到了时间,所以当我按联系日期(时间)分组时,每个联系日期实例的计数为“1”。所以,我想只按没有时间的日期分组。下面是我用来查询数据库的表达式:

MyDataContext db = new MyDataContext();
var items = (from h in db.ContactHistories
             group h by h.contact_dt into g
             orderby g.Key
             select new
             {
                 contact_dt = g.Key,
                 item_count = g.Count()
             }).Take(50);

我试过了

     h.contact_dt.ToShortDateString()

但这不起作用,因为 SQL 确实知道 ToShortDateString()。任何想法都非常感谢。

谢谢!

编辑:

.Take(50) 用于限制我获得的记录数量,直到我添加日期选择器和 where 子句,所以我不会获得所有 400K 记录。 ;)

【问题讨论】:

    标签: c# linq-to-sql datetime


    【解决方案1】:

    使用Date 属性:

    group h by h.contact_dt.Date into g
    

    LINQ to SQL 知道这一点 - 请参阅 this handy page 的“理解”方法和属性。

    编辑:好的,所以直接分组是行不通的......我们试着给它一点帮助怎么样:

    var items = (from h in db.ContactHistories
                 select h.Date into date
                 group date by date into g
                 orderby g.Key
                 select new
                 {
                     contact_dt = g.Key,
                     item_count = g.Count()
                 }).Take(50);
    

    我不知道它是否会起作用,但值得一试......

    【讨论】:

    • @Jon Skeet 它的默认类型为 DateTime (SQL) 是 DateTime (.NET)
    • 请参阅msdn.microsoft.com/en-us/library/bb882657.aspx 以获取 LINQ to SQL 支持的所有 DateTime 方法的列表
    • @Hightechrider:太好了,谢谢。以前不知道。将编辑以推广链接...
    • @Jon: select-into,哇,这对我来说是第一次。你会碰巧知道任何记录吗?找不到任何提及诸如此类的用法的内容。我能找到的最接近的是into 参考,仅此而已。
    • @Jeff:在msmvps.com/blogs/jon_skeet/archive/2010/09/15/…@Jeff 上写了这篇博客
    【解决方案2】:

    使用 DateTime 对象的.Date 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2010-11-28
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多