【问题标题】:how to check linq comparing date format in vb.net如何在 vb.net 中检查 linq 比较日期格式
【发布时间】:2013-07-04 23:48:53
【问题描述】:

假设我想要记录日期为“07/03/2013”​​的所有员工,其中格式为“MM/dd/yyyy”。 我在 linq 中的表达将是:

_dbContext.EmployeeDetails.Where(Function(f) f.EmpId = _empId And f.Date="07/03/2013")

这里 linq 如何将日期格式管理为“MM/dd/yyyy”。或者如何将“f.Date”与 MM/dd/yyyy 进行比较?

说, 如果我这样做了

_dbContext.EmployeeDetails.Where(Function(f) f.EmpId = _empId And f.Date.ToString("MM/dd/yyyy")="07/03/2013")

它不允许我。假设我的日期是“07/13/2013”​​,那么我们可以认为它匹配并将格式与"f.Date" 同步,但是日期小于 12 呢?实际上,通过使用第一个表达式,m 得到了三月的月份记录,而不是七月。 如何解决这个问题?

【问题讨论】:

  • 您是否使用 LINQ to SQL 执行此操作?还是 LINQ 到 EF?无论哪种情况,linq 标签都无关紧要。

标签: vb.net linq datetime


【解决方案1】:

您正在比较日期/时间的字符串表示形式,这取决于当前系统的格式选项。使用date literal(必须在'M/d/yyyy'中)创建一个新的DateTime对象:

_dbContext.EmployeeDetails.Where(Function(f) f.EmpId = _empId And f.Date=#3/7/2013#)

如果是变量,说dte

_dbContext.EmployeeDetails.Where(Function(f) f.EmpId = _empId And f.Date=dte)

【讨论】:

  • 但是说我的 3/7/2013 是可变的,那么我应该如何使用文字?它又会在格式上不匹配。对吗?
  • 谢谢,但我仍然认为 linq 使用自己的格式进行检查。编辑无法以某种方式工作。还有其他想法吗?
  • 比较两个DateTime 实例时,格式无关紧要。它将比较两个实例的值,如果它们相同,则返回 true。是什么让您认为存在基于字符串的比较?代码在编译吗?如果您的 3/7/2013 在变量中,请确保它的类型为 DateTime 而不是 string
【解决方案2】:

应该是这样的:

_dbContext.EmployeeDetails.Where
   (Function(f) f.EmpId = _empId And
                f.Date.ToString("dd/MM/yyyy")="07/03/2013")

你先通过Month,所以它会解析March。更改toString 订单,以便您在前几天和一个月前通过。 (七月)

【讨论】:

  • 好吧,F.Date.ToString("dd/MM/yyyy") Linq 不允许。所以不能用这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多