2

我正在尝试使用 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 格式,然后运行所需的查询.....有什么想法吗?

4

3 回答 3

2

使它成为 DateTime - 所以

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
于 2012-05-04T12:13:26.117 回答
0

只需将您的日期字符串转换为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)
于 2012-05-04T15:04:49.300 回答
0

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

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

于 2012-05-17T20:43:28.783 回答