Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用sql中的日期和时间获取数据#_C#_Sql_Visual Studio_Entity Framework_Linq - Fatal编程技术网

C# 在C中使用sql中的日期和时间获取数据#

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

我有一个简单的控制台应用程序,这个应用程序从SQL server获取数据。我必须使用SQL server中的日期和时间搜索数据。如果我只输入年份(例如,如果我输入
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
的输入?谢谢大家的帮助,我解决了这个问题。