【问题标题】:C# MySQL LINQ DateTime conversionC# MySQL LINQ 日期时间转换
【发布时间】:2012-05-13 23:37:02
【问题描述】:

我正在尝试使用 LINQ 和 C# 从 mySQL DB 中检索记录。

c#代码中的日期是一个字符串:23-01-2010

我需要将此转换为 DateTime 格式为 2010-01-23(mySQL 默认 DateTime 格式),否则查询不会返回任何记录,目前它错误说字符串无法与 DateTime 匹配(row.DateOfIssue ) 如果我将字符串转换为 DateTime (C#),那么它不是 yyyy-MM-dd 的 mySQL DateTime 格式

String endDate = "23-01-2010"; 
var query = (from row in uow.UserPersonalLicenseDetails
                             where (endDate >= row.DateOfIssue && endDate <= row.DateOfExpiry)
                             select row)

这是一个如此标准的查询,在 LINQ 中很难做到这一点似乎很疯狂。 似乎将任何方法(如 CompareTo 等)放在 where 子句中会导致“搜索适用于这种情况的类”的错误

我现在想知道最好的攻击路线是否可能是在数据库中编写存储过程。然后可以将 C# 日期时间作为参数,将其转换为 mySQL 格式,然后运行所需的查询..... 有什么想法吗?

【问题讨论】:

标签: c# mysql date


【解决方案1】:

让它成为一个日期时间 - 所以

var myDate = DateTime.Parse(endDate); 

然后

myDate.ToString("yyyy-MM-dd");

--------- 或者这个:

    var myDate = DateTime.Parse(endDate); 
var query = (from row in uow.UserPersonalLicenseDetails 
where ((myDate.CompareTo(row.DateOfIssue)>=0 && (myDate.CompareTo(row.DateOfExpiry)<=0) 
select row

【讨论】:

  • 这给出了错误:“运算符 >= 不能应用于 String 和 System.DateTime 类型的操作数
  • 这可以吗?:String endDate = "23-01-2010"; var myDate = DateTime.Parse(endDate).ToString("yyyy-MM-dd"); var query = (from row in uow.UserPersonalLicenseDetails where (myDate >= row.DateOfIssue && myDate
  • 这个怎么样:var myDate = DateTime.Parse(endDate); var query = (from row in uow.UserPersonalLicenseDetails where ((myDate.CompareTo(row.DateOfIssue)>=0 && (myDate.CompareTo(row.DateOfExpiry)
【解决方案2】:

只需将您的日期字符串转换为DateTime,然后在 LINQ 中将字符串转换为返回的DateTime,以便进行比较。我使用了ParseExact,因为我们需要确保解析为 MySQL 存储日期的确切格式,即yyyy-MM-dd hh:mm

类似:

var endDate = DateTime.Parse("23-10-2010").ToString("yyyy-MM-dd hh:mm");
var formattedEndDate = DateTime.Parse(endDate);
//you could cut that to one line by putting the date in said format in the first place

var query = (from row in uow.UserPersonalLicenseDetails
             where formattedEndDate >= row.DateOfIssue
                 && formattedEndDate <= row.DateOfExpiry
             select row)

【讨论】:

  • 这看起来很有希望,但是,ParseExact 期望第一个参数是字符串,但是 row.DateOfIssue 是数据库中的一个日期......thx
  • 啊,我以为它们是字符串,更新了我的答案以反映:)
  • 我认为这行不通。 ParseExact 期望参数 1 的格式与参数 2 指定的格式完全相同。
  • 已编辑!是的,抱歉,需要将其解析为具有该格式的字符串,然后再次解析(您可以通过执行var endDate = DateTime.Parse("2010-10-23 00:00"); 将其删除,但如果您的结束日期将是传入的参数,那么我想它更容易像我在编辑中那样做:)
  • 抱歉,这不起作用,因为第二次解析会将日期转换回 C# 格式,而不是保持 yyyy-MM-dd 格式....sob sob...这是非常痛苦的
【解决方案3】:

好的,问题是表的字段定义为 DATE 而不是 DATETIME,因此没有进行匹配。

使用 DateTime.Date 并且匹配成功。

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 2017-09-23
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多