LINQ to Entities无法识别方法'System.DateTime ToDateTime(System.String)'

时间:2017-02-06 09:14:45

标签: c# linq

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

我想列出过去七天的数据

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

  

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

请告知。

2 个答案:

答案 0 :(得分:0)

尝试尝试以下

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无法识别转换功能,因此请先进行转换。

答案 1 :(得分:-1)

我创建了一个在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日