C# 在C中使用sql中的日期和时间获取数据#
我有一个简单的控制台应用程序,这个应用程序从SQL server获取数据。我必须使用SQL server中的日期和时间搜索数据。如果我只输入年份(例如,如果我输入C# 在C中使用sql中的日期和时间获取数据#,c#,sql,visual-studio,entity-framework,linq,C#,Sql,Visual Studio,Entity Framework,Linq,我有一个简单的控制台应用程序,这个应用程序从SQL server获取数据。我必须使用SQL server中的日期和时间搜索数据。如果我只输入年份(例如,如果我输入2017或2018),则下面的代码有效,然后它会获取该年份的所有数据,但如果我尝试输入2017-07-22,则不会获取任何数据。我的SQL server的日期格式为年-月-日-hh-mm-ss。我被困在这里了。有什么建议吗 using (var context = new Model1()) { Console.WriteLin
2017
或2018
),则下面的代码有效,然后它会获取该年份的所有数据,但如果我尝试输入2017-07-22
,则不会获取任何数据。我的SQL server的日期格式为年-月-日-hh-mm-ss
。我被困在这里了。有什么建议吗
using (var context = new Model1())
{
Console.WriteLine("Enter Date");
DateTime dateTime;
var s = dateTime.ToShortDateString();
s = Console.ReadLine();
var result = context.Databases.
Where(x => x.RecordedTime.Value.ToString().
Contains(s)).ToList(); ;
foreach (var item in result)
{
Console.WriteLine($"{item.RecordedTime.Value.ToShortDateString()}, {item.Temperature}");
}
}
您不需要转换为字符串,只需解析它。要使用精确的格式进行分析,可以使用
DateTime.TryParseExact
如下所示,基于您提供的格式:
s = Console.ReadLine();
DateTime dt;
DateTime.TryParseExact(s,
"yyyy-MM-dd HH-mm-ss",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt);
//... do linq stuff with variable dt
整个方法毫无意义。您创建一个日期时间(具有其默认值),将其转换为字符串并将其分配给
s
,然后接受userinput以完全覆盖s
。您应该做的只是接受用户输入,使用datetime.TryParse()
将该字符串解析为日期,然后使用LINQ和实际日期,而不是字符串比较。同意@maccettura。不需要使用字符串。如图所示,将来自用户的数据解析为Date
变量,然后使用该变量进行比较。我也尝试过使用TryParse,但如果只输入日期而不输入完整日期,它也会返回数据请参见TryParseExact上的答案。另外,为了您自己的理智,不要在字符串中使用括号内的方法,只需生成所需的字符串,然后使用字符串连接将其插入。使用此解决方案,它可以完美地处理年份,但在我输入完整日期时则不行。当我进入2017-07-22时,它没有显示任何内容。但是当我只输入2017时它就会显示出来。@user3280146-查看各种解析方法TryParseExact
就是其中之一。它有很多选择ParseExact
、Parse
和TryParse
是其他的。您必须根据您期望用户做的事情做出一些决定。@Guillerme-小心,如果您使用hh
,您也要提供tt
。或者使用HH
。否则就无法提供中午后的时间。@user3280146,我发布的这个示例应该使用您提供的格式:yyyy-MM-dd HH-MM ss
,您是否尝试过类似于2017-11-01 09-10-10
的输入?谢谢大家的帮助,我解决了这个问题。