【问题标题】:LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)'LINQ to Entities 无法识别方法“System.DateTime ToDateTime(System.String)”
【发布时间】:2017-02-06 09:14:45
【问题描述】:

我有一列 TG003 来存储日期,它是一个字符串。

我想列出过去 7 天的数据

以下是我所做的,但我遇到了错误:

LINQ to Entities 无法识别方法 'System.DateTime ToDateTime(System.String)' 方法,并且该方法无法转换为存储表达式。

public List<CCOPTG> listrecentCCOPTG()
{
    string startdate = DateTime.Today.AddDays(-7).ToString("yyyyMMdd");
    string enddate = DateTime.Now.ToString("yyyyMMdd");
    return db.CCOPTG.Where(p => Convert.ToDateTime(p.TG003)>=Convert.ToDateTime(startdate) && Convert.ToDateTime(p.TG003) <= Convert.ToDateTime(enddate)).OrderByDescending(p=>p.TG003).ToList();
}

请指教。

【问题讨论】:

  • 对数据使用正确的数据类型。 不要将日期存储为字符串。将TG003 的类型更改为date。您可能不必更改任何其他内容,yyyyMMdd 是明确的日期文字格式
  • 错误提示:“Linq 尝试将 Convert.ToDateTime 转换为 SQL。但此方法没有直接翻译”。基本上SQL没有Convert.ToDateTime方法。
  • 我将数据类型更改为 DateTime ,感谢您的建议!

标签: c# linq


【解决方案1】:

尝试尝试关注

public List<CCOPTG> listrecentCCOPTG()
{
    datetime startdate = DateTime.Today.AddDays(-7);
    datetime enddate = DateTime.Now;
    return db.CCOPTG.Where
        (p => p.TG003>=startdate && p.TG003 <= enddate)
        .OrderByDescending(p=>p.TG003).ToList();
}

LINQ 无法识别转换函数,因此请先进行转换。

【讨论】:

    【解决方案2】:

    我创建了一个在 LinqPad 中运行且没有任何错误的示例。

    void Main()
    {
           List<CCOPTG> list = new List<CCOPTG>();
    
          for (DateTime i =DateTime.Today.AddDays(-20); i <DateTime.Today; i=i.AddDays(1))
          {
            list.Add(new CCOPTG { TG003 = i.ToShortDateString()});
          }
    
        listrecentCCOPTG( list);
    }
    
    public class CCOPTG
    {
    public string TG003 { get; set;}
    
    }
    // Define other methods and classes here
    public static void listrecentCCOPTG(List<CCOPTG> list)
    {
    DateTime startdate = DateTime.Today.AddDays(-7);
    DateTime enddate = DateTime.Now;
     list.Where
        (p => DateTime.Parse(p.TG003) >= startdate && DateTime.Parse(p.TG003) <= enddate)
        .OrderByDescending(p => p.TG003).ToList().Dump();
    }
    

    这产生了以下结果:

    2017 年 2 月 5 日
    2017 年 2 月 4 日
    2017 年 2 月 3 日
    2017 年 2 月 2 日
    2017 年 2 月 1 日
    2017 年 1 月 31 日
    2017 年 1 月 30 日

    【讨论】:

    • Linq with objects 与 Linq to SQL 不同。您将得到 DateTime.Parse 处理内存中的对象,但它不能很好地转换为 SQL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多