LINQ to entites无法识别Convert.ToDatetime方法

时间:2016-06-29 08:58:21

标签: c# linq

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

我有以下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();

3 个答案:

答案 0 :(得分:0)

所以我无法得到我想要的东西,因为我必须进行太多更改,所以我正在做的解决方法是:我正在使用此代码

var logs = db.UserActivities.ToList().Take(100);

这将获得最后100个条目。我将为更多或更少的条目提供选项,然后他们可以在数据表的搜索栏中过滤日期。

它并不好,但时间不利于我,这就足够了。

答案 1 :(得分:0)

您是否至少每天都输入数据?如果是这样,那么这样的事情:

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而不是-14,如果你不介意在第15天抓住未知的百分比。

答案 2 :(得分:-1)

如果您的Convert.ToDateTime格式正确,则

Query_Date有效。如果没有,请检查您的字符串表达式是否为可转换格式。

我测试了下面的代码,当我假设Query_DateDateTime.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();

我还使用 where 表达式Convert.ToDateTime(bwl.Query_Date) >= DateTime.Now.AddDays(-14)进行了测试,并确认其结果相同。