在表中,DueDate数据类型为varchar。现在我想用今天的日期检查截止日期
var query = (from o in db.Order_Reports
where Convert.ToDateTime(o.ReportDueDateTime) >= DateTime.Now
select o);
错误
LINQ to Entities无法识别方法'System.DateTime ToDateTime(System.String)'方法,并且此方法无法转换为商店表达式。
我想如何将字符串转换为日期和时间并检查今天的日期
答案 0 :(得分:1)
我不知道如何描述它的方法,因为
但是,有一些可能的解决方法
(代码)
// Our required date
DateTime reportDate = new DateTime(2014,1,1).Date;
// Let's find number of days between now and required day. Ensure that the date is not in the future!
int deltaDays = (DateTime.Now.Date - date).Days;
// Let's get the list of dates which we need the reports for
var dates = Enumerable.Range(0, deltaDays + 1).Select(dd => DateTime.Now.Date.AddDays(-dd).ToString("MM/dd/yyyy")).ToArray();
// and query by this list
var query = (from o in db.Order_Reports
where o.ReportDueDateTime in dates
select o);
这样效率会有点低,但可以在不更改数据库的情况下达到目的。将其视为临时解决方案。
答案 1 :(得分:0)
尝试DateTime.Parse(o.ReportDueDateTime)并查看是否有效
答案 2 :(得分:0)
问题是Linq-to-Entities无法将Convert.ToDateTime
转换为有效的sql。如果您通过调用AsEnumerable()
或ToList()
将所有记录带入内存,那么您将使用Linq-To-Sql,它将与C#函数一起使用:
var query = (from o in db.Order_Reports.AsEnumerable()
where DateTime.ParseExact(o.ReportDueDateTime,
"MM/dd/yyyy",
"M/d/yyyy") >= DateTime.Now
select o);
问题在于您可能会将太多记录带入内存。但是如果您有足够的报告可以担心,那么您应该在ReportDueDateTime
上放置一个数据库索引,并且您需要该索引按日期顺序排列。因此,将该列更改为DateTime
或将数据更改为可按字母顺序排序的格式 - 如“YYYY-MM-DD-HH-mm”。然后你可以这样做:
var query = (from o in db.Order_Reports
where String.Compare(ReportDueDateTime,
DateTime.Now.ToString("YYYY-MM-DD-HH-mm")) >= 0
select o);
答案 3 :(得分:0)
是的,这是Linq-to-Entities中的一个问题
这种情况发生在常规DateTime,但它是nullable
Linq可以理解Convert.ToDateTime
或GetValueOrDefault()
但是Entitie没有体育
你使用 Date.Value
本代码:
var x = myContext.MyTable.Where(tbl => tbl .MyDateColumn.Value == DateTime.Now)
答案 4 :(得分:0)
您可以使用String.Compare。
var query = from o in db.Order_Reports
where String.Compare(o.ReportDueDateTime, Now.ToString()) > 0
select o;
答案 5 :(得分:-1)
也许这会起作用
// Make new variable in DateTime Format
DateTime dateFrom = DateTime.ParseExact(o.ReportDueDateTime, "MM/dd/yyyy", CultureInfo.InvariantCulture);
var query = (from o in db.Order_Reports
where dateFrom >= DateTime.Now
select o);