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();

LINQ到实体不识别转换.ToDatetime方法

所以我不能得到我想要的,因为我必须做出太多的改变,所以我正在做的工作是:我正在使用这个代码

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_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();

我还测试了你的,其中表达式Convert.ToDateTime(bwl.Query_Date) >= DateTime.Now.AddDays(-14),并确认它给出了相同的结果。