【问题标题】:Query OrderBy Dates stored in string Linq查询存储在字符串 Linq 中的 OrderBy 日期
【发布时间】:2018-05-26 13:26:12
【问题描述】:

我是 asp.net 的初学者,我想按日期排序的消息列表有一个问题。我尝试了一些不同的方法,但是当我将这些日期存储在数据库中的字符串中时,我找不到返回按日期排序的查询结果的方法。

我尝试过这样的事情:

public static IEnumerable<TResult> GetList<TResult>(IPager pager, string date = null , long? companyId = null, string content = null)
    {

        using (var context = Context.Read())
        {
            var query = context.Query<Message>().AsQueryable();

            if (!string.IsNullOrEmpty(content))
            {
                query = query.Where(p => p.Content.Contains(content));
            }

            return query
                .OrderByDescending(d => DateTime.Parse(d.Date)).Take(10)
                .Pager(pager)
                .GetResult<TResult>();
        }

我得到一个错误。有什么建议吗?

【问题讨论】:

  • when i have those dates stored in strings in db : Any suggestions? => 不要将日期存储为字符串 ;-) .. 如果您将它们存储为字符串:将它们存储为 ISO 可排序:YYYYMMDD。
  • 当我使用 datetime 时,我与 c# 和 sql 中的日期格式发生冲突
  • 然后解决这个冲突。 SQL Date 和 C# DateTime 很好地结合在一起。

标签: c# asp.net .net linq sql-order-by


【解决方案1】:

DbContext 类中使用此配置应该可以解决您提到的DateTime 冲突:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Converts to datetime2 to avoid problems with Server dates and .NET dates conflicts
    modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}

允许您将日期存储为 DateTime 而不是 string,这将允许使用 linq 进行正确排序。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多