我的数据库中有字符串格式的“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();
}
答案 0 :(得分:0)
timein
和timeout
更适合数据库类型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,以便了解其工作原理。