在日期范围内返回DB结果

时间:2014-12-01 19:11:28

标签: c# sql-server asp.net-mvc entity-framework date-range

在我看来,我有一个输入和选择标签供用户输入开始和结束日期。 提交后,控制器将搜索模型/数据库并返回上述范围内的条目。

在我的数据库中,开始和结束日期写为“nvarchars”,在我的控制器中,它们被视为字符串

代码和图片供参考:

public ActionResult timePeriod(string time)
{
    //Start: month, day, year End: month, day, year --> Numeric values
    string[] times = time.Split(',');                             
    string start = times[0] + " " + times[1] + " " + times[2];
    string end = times[3] + " " + times[4] + " " + times[5];

    //Sample code to test the start date
    viewModel.Tasks = db.Tasks.Where(s => s.StartTime.Contains(start)).ToList();
}

数据库值的片段:

enter image description here

有没有LINQ表达式可以做到这一点?

1 个答案:

答案 0 :(得分:2)

由于日期是字符串,除了使用您已建议的内容之外,您没有其他更好的选择:

viewModel.Tasks = db.Tasks.Where(s => s.StartTime.Equals(start)).ToList();

我会使用Equals,因为这对你来说会更快。使用Contains基本上就像做一个慢得多的T-SQL LIKE

SELECT *
FROM Table
WHERE StartDate LIKE 'blah'

使用Equals将产生以下等效项:

SELECT *
FROM Table
WHERE StartDate = 'blah'

效率更高。