【问题标题】:Ignore time portion of DateTime in linq query在 linq 查询中忽略 DateTime 的时间部分
【发布时间】:2017-06-26 20:34:35
【问题描述】:

我正在尝试按DateAdded(类型为DateTime)的日期部分对“组织”进行排序,同时忽略时间。在该主要排序之后,我想按组织名称进行排序。

这是我目前拥有的,但它也是根据时间排序的:

IQueryable<Organization> organizations = from m in context.Organizations
    orderby m.OrgName ascending
    orderby m.DateAdded ascending
    select m;

上面的方法几乎可行,但它也可以按时间排序。

【问题讨论】:

  • 取决于您的 IQueryProvider。实体框架?链接到sql?
  • m.DateAdded .Date 应该可以解决它的日期时间
  • 除非 IQueryProvider 支持,否则不会工作

标签: .net linq sorting datetime


【解决方案1】:
IQueryable<Organization> organizations = context.Organizations
    .Orderby( m => m.DateAdded.Date )
    .ThenBy( m => m.OrgName );

我看到您正在使用 IQueryable,这暗示您正在使用实体框架 (Linq-to-Entities),其中(我相信)DateTime.Date 不起作用,但您可以使用 EntityFunctions.TruncateTime

using System.Data.Entity;

IQueryable<Organization> organizations = context.Organizations
    .Orderby( m => EntityFunctions.TruncateTime( m.DateAdded ) )
    .ThenBy( m => m.OrgName );

【讨论】:

  • 真的很接近,戴。你仍然有我必须删除的“.Date”,我不得不稍微不同地调用 TruncateTime。这有效: IQueryable organizations = context.Organizations.OrderBy(m => System.Data.Entity.DbFunctions.TruncateTime(m.DateAdded)).ThenBy(m => m.OrgName)
  • @SteveA 感谢您对其进行测试 :) 我已经修改了答案。
【解决方案2】:

如果是EntityFramework你可以使用

EntityFunctions.TruncateTime 日期

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多