我正在使用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>();
答案 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函数。