如何比较linq中的日期

时间:2018-02-25 14:51:05

标签: c# linq date linq-to-entities

我正在使用linq而我正在尝试比较两个日期并且我得到支持错误我用Google搜索并使用了示例但仍然得到了不支持的错误 - System.NotSupportedException,我在做什么错了?

// VARS

int numDaysPassed =Int32.Parse(ConfigurationManager.AppSettings["DaysPassed"]);    
  DateTime todayPlusConfigDays = DateTime.Today.Date.AddDays(numDaysPassed);

//选项1

List<Customerfiles> Customerfiles = context.Customerfiles.Where(x => x.Status == currentStatus && (x.UpdateDate.Value.Date.CompareTo(todayPlusConfigDays)==0)).ToList<Customerfiles>();

//选项2

List<Customerfiles> Customerfiles = context.Customerfiles.Where(x => x.Status == currentStatus && (x.UpdateDate.Value.Date == todayPlusConfigDays)).ToList<Customerfiles>();

1 个答案:

答案 0 :(得分:0)

您得到的错误是因为当查询在数据库层时,LINQ无法将您调用的每个函数转换为SQL中的类似调用,因为这些函数在SQL中根本不存在。

为什么不进行简单的比较?

List<Customerfiles> Customerfiles = context.Customerfiles.Where(x => x.Status == currentStatus && x.UpdateDate.Value.Date == todayPlusConfigDays).ToList();

如果你想摆脱这个问题而不用担心性能,试试这个:

List<Customerfiles> Customerfiles = context.Customerfiles.ToList().Where(x => x.Status == currentStatus && x.UpdateDate.Value.Date == todayPlusConfigDays).ToList();

我刚刚在查询的开头添加了一个“ToList()”。这会将所有customerFiles带到内存中,这通常是一种非常糟糕的方法。这样,LINQ可以做任何你想做的事情,因为它不需要转换为SQL函数。