我正在进行查询,比较SQL Server中的两个DateTime
值。 SQL Server中DateTime
的格式为:
2010-09-20 00:00:00.000
我正在使用Entity Framework,让我告诉你我现在面临的问题。
当我在实体框架中比较DateTime
值时,该属性必须与数据库相同,这意味着必须为DateTime
。日期来自帖子,这意味着这是一个字符串。这里的问题是,如何将它们转换为DateTime
并且格式与数据库中的格式相同?
用户的输入以字符串形式出现,我所做的是:
DateTime start_date = Convert.ToDateTime(postValueHere);
但价值不如预期:
2010/20/46 12:00:00 am
所以,我给它一个格式:
string format = "yyyy-MM-dd 00:00:00.000";
string date = start_date .ToString(format);
但现在该值变为字符串,这意味着我无法将该值与实体框架进行比较:
db.Product.Where(x=>x.START_DATE== date)//error, cannot compare datetime with string.
如何将用户的输入转换为与SQL Server相同的格式,然后转换为DateTime
?
答案 0 :(得分:2)
您可以尝试使用DateTime.TryParseExact()作为:
DateTime start_date;
DateTime.TryParseExact(strDate, "yyyy-MM-dd hh:mm:ss tt",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out start_date);
Console.WriteLine(start_date);
您可以查看here以获取更多自定义格式。
答案 1 :(得分:0)
如果您使用EF从数据库中获取该日期值,则它应该以具有DateTime类型的属性结束。此值只是一个DateTime结构,没有任何格式
当您从帖子检查解析的日期时,调试器在值上使用.ToString()
来获取它可以显示的字符串。它仍然是没有任何格式的DateTime结构!
所以只需比较DateTime值,而不必担心格式。