Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ to实体无法识别Convert.ToDatetime方法_C#_Linq - Fatal编程技术网

C# LINQ to实体无法识别Convert.ToDatetime方法

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) >=

编辑所有其他链接到上一个问题的答案对我来说不起作用,因为他们要么使用两个表格,要么知道他们要找的起始日期

我有下面的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();
如果查询日期的格式正确,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;