代码之家  ›  专栏  ›  技术社区  ›  deanpillow

使用linq从sql server返回基于用户日期超时集的记录

  •  0
  • deanpillow  · 技术社区  · 2 年前

    我有一个从UI传递的dateTime偏移量值,看起来像

    开始日期:2022-04-25 21:08:02.2973333+00:00但我输入的日期实际上是26日

    我想从数据库中获得26日之前和26日相等的所有记录。

    这是我试过的

    await _repository.GetProjectedListAsync(q=>q.Where(x => x.Created <= DateTime.Parse( query.StartDate.ToString()).ToString("yyyy/MM/dd") ).Select(FirstName))).ToList();
    

    sql中创建的列如下所示

    Created column

    上面的转换不起作用,它没有返回任何结果。 有没有办法我可以转换重复的日期以返回记录 其中创建<=开始日期 ?

    0 回复  |  直到 2 年前
        1
  •  0
  •   Victor    2 年前

    首先,让我们看看代码:

    var textDate = DateTime.Parse(query.StartDate.ToString()).ToString("yyyy/MM/dd")
    
    await _repository.GetProjectedListAsync(q => 
        q.Where(x => x.Created <= startDate)
           .Select(FirstName)))
        .ToList();
    

    如果您有一个值相同的变量,最好在外部进行解析。然后,您只进行一次解析。如果您查看文本日期:

    • 取StartDate并转换为字符串。
    • 然后,解析到日期。
    • 并再次转换为字符串。

    这句话没有任何作用,因为您转换为字符串并返回到最新版本:

    DateTime.Parse(query.StartDate.ToString())
    

    因此,我们有:

    var textDate = query.StartDate.ToString("yyyy/MM/dd")
    

    我想你只想要有日期的工作(没有时间)

    var startDate = query.StartDate.Date
    

    如果我没有错,你想要这样的东西:

    var startDate = query.StartDate.Date
    await _repository.GetProjectedListAsync(q => 
        q.Where(x => x.Created <= startDate)
           .Select(FirstName)))
        .ToList();