MVC字符串和时间与< => =进行比较

时间:2017-10-04 18:11:53

标签: linq

我的数据库中有字符串格式的“timein”和“timeout”,我需要帮助,因为我不知道逻辑。

类似的东西:

        Entity.time a;

        using (var b = new Entity.DatabaseEntities())
        {
            a = b.times.Where(v => Convert.ToDateTime(v.timein) <= Convert.ToDateTime(DateTime.Now.ToString("hh:mm")) && Convert.ToDateTime(v.timeout) >= Convert.ToDateTime(DateTime.Now.ToString("hh:mm"))).FirstOrDefault();

        }        

1 个答案:

答案 0 :(得分:0)

timeintimeout更适合数据库类型Time和.net类型TimeSpan。假设字符串的格式为HH:mm,您应该进行字符串比较,不要在查询中转换任何内容,这样查询就是SARGable。如果它们采用其他格式,则必须使用一些示例数据更新问题。

您的查询无法工作的原因是因为表达式需要能够转换为SQL语句而不是所有内容(实际上大多数类型/方法)都不可翻译。

Entity.time a;
using (var b = new Entity.DatabaseEntities())
{
    var timeOfDay = DateTime.Now.ToString("HH:mm");
    a = b.times.FirstOrDefault(v => 
        string.Compare(v.timein, timeOfDay) >= 0
        && string.Compare(v.timeout, timeOfDay) <= 0);
}

有关支持的规范方法/函数的列表,请参阅Canonical Functions

另请参阅string.Compare,以便了解其工作原理。