LINQ到实体不识别转换.ToDatetime方法
本文关键字:转换 ToDatetime 方法 识别 实体 LINQ | 更新日期: 2023-09-27 17:53:09
EDIT所有链接到前一个问题的其他答案不会为我工作,因为他们要么使用两个表,要么他们知道他们正在寻找什么开始日期。
我有以下的LINQ查询,我试图从表中获得过去14天的数据。LINQ不识别Convert。ToDatetime方法。Query_Date列是一个类型字符串,我不能更改它。我如何得到我需要的数据?
var logs = (from bwl in db.UserActivities
where Convert.ToDateTime(bwl.Query_Date) >= DateTime.Now.AddDays(-14)
select new
{
Id = bwl.Id,
UserEmail = bwl.UserEmail
}).ToList();
所以我不能得到我想要的,因为我必须做出太多的改变,所以我正在做的工作是:我正在使用这个代码
var logs = db.UserActivities.ToList().Take(100);
这将获得最后100个条目。我会为更多或更少的条目提供选项,然后他们可以在数据表上的搜索栏中过滤日期。
这不是很好,但时间紧迫,这就足够了。
您是否至少每天都要输入数据?如果是这样,那么像这样的内容如何:
var oldestDate = DateTime.Now.AddDays(-14);
var dateString = oldestDate.ToString(*/ your date format */);
var oldestID = db.UserActivities.First(b => b.Query_Date == dateString).Id;
var logs = (from bwl in db.UserActivities
where bwl.Id > oldestID
select new {
Id = bwl.Id,
UserEmail = bwl.UserEmail
}).ToList();
基本上,您在该日期找到一条记录,并使用其ID作为该日期的代理。这只在某些情况下有效(例如,如果id按日期顺序排列)。
这也不能保证是该日期最老的条目,但这可以通过使用ID order来实现:
var oldestID = db.UserActivities.Where(b => b.Query_Date == dateString)
.OrderBy(b => b.Id)
.First().Id;
或者在添加天数时使用-15而不是-14,如果您不介意抓取第15天的未知百分比
Convert.ToDateTime
工作,如果您的Query_Date
有适当的格式。如果不是,检查字符串表达式是否为可转换格式。
我测试了下面的代码,当我假设Query_Date
是DateTime.toString()
的一种形式时,它工作得很好。
var logs = (from bwl in db.UserActivities
where DateTime.Now - Convert.ToDateTime(bwl.Query_Date) <= TimeSpan.FromDays(14)
select new
{
Id = bwl.Id,
UserEmail = bwl.UserEmail
}).ToList();
我还测试了你的,其中表达式Convert.ToDateTime(bwl.Query_Date) >= DateTime.Now.AddDays(-14)
,并确认它给出了相同的结果。