C# LINQ to实体无法识别Convert.ToDatetime方法
编辑所有其他链接到上一个问题的答案对我来说不起作用,因为他们要么使用两个表格,要么知道他们要找的起始日期 我有下面的LINQ查询,我试图从表中获取过去14天的数据。LINQ无法识别Convert.ToDatetime方法。Query_Date列是一个类型字符串,我无法更改它。如何获取所需的数据C# LINQ to实体无法识别Convert.ToDatetime方法,c#,linq,C#,Linq,编辑所有其他链接到上一个问题的答案对我来说不起作用,因为他们要么使用两个表格,要么知道他们要找的起始日期 我有下面的LINQ查询,我试图从表中获取过去14天的数据。LINQ无法识别Convert.ToDatetime方法。Query_Date列是一个类型字符串,我无法更改它。如何获取所需的数据 var logs = (from bwl in db.UserActivities where Convert.ToDateTime(bwl.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();
如果查询日期的格式正确,Convert.ToDateTime将起作用。如果不是,请检查字符串表达式是否为可转换格式
我测试了下面的代码,当我假设Query_Date是DateTime.toString的一种形式时,它可以正常工作
我还使用where表达式Convert.ToDateTimebwl.Query_Date>=DateTime.Now.AddDays-14进行了测试,并确认它给出了相同的结果。因此我无法得到我想要的结果,因为我必须进行太多的更改,所以我正在做的解决方法是:我正在使用此代码
var logs = db.UserActivities.ToList().Take(100);
这将给我最后100个条目。我会为更多或更少的条目提供选项,然后他们可以在datatable的搜索栏中按日期对其进行筛选
这不太好,但时间对我不利,这就足够了。你至少每天都有数据输入吗?如果是这样,那么像这样的事情呢:
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顺序:
var oldestID = db.UserActivities.Where(b => b.Query_Date == dateString)
.OrderBy(b => b.Id)
.First().Id;
或者,如果您不介意获取第15天的未知百分比,则可以更懒地使用-15而不是-14。请看这里:bwl.Query\u Date的数据类型是什么?SqlFunctions类可以帮助您解决这一问题,因为实体框架不支持这种行为。就我个人而言,我会立即使用正确的数据类型,而不是转换查询中的值。@Hari Prasad表中的stringmy格式是dd/MM/yyyy。我仍然认为LINQ to Entities无法识别“System.DateTime ToDateTimeSystem.String”方法,并且无法将该方法转换为存储表达式。不管我用什么格式into@user6295447//你能试试这个吗?首先调用ToList,以便首先注入内存。它效率不高,但似乎是唯一的选择,除非您的时间位本身没有意义。我想要最后2周的原因是,该表包含6个月的数据,我不想返回所有数据,然后显示最后2周的数据。我只想带回所需的数据。我现在就不谈了,等我有更多时间再谈。我可能需要做一些改变才能得到我想要的for@user6295447//如果保证id或其他某个值按顺序增加,则不能要求提取所有数据。当然,迭代作业可以解析给定的日期并获取其中的某些部分。不管怎样,这并不整洁:
var oldestID = db.UserActivities.Where(b => b.Query_Date == dateString)
.OrderBy(b => b.Id)
.First().Id;