写linq语句时需要比较数据库中的日期和当前日期,写的代码如下
var taskInCount = repository.DbContext.Set<Wms_TaskHistory>().Where(q => DateTime.Parse(q.CreateDate.ToString()).Date == dateTime && new TaskType[] { TaskType.整盘入库, TaskType.空盘入库, TaskType.补充入库, TaskType.分拣补入 }.Contains((TaskType)q.TaskType)).Count();
在执行时报错
提示需要重写查询为可翻译的形式或者换成client evaluation explicitly(显式客户端评估) ,同时给出一个网址客户端与服务器评估,
里面说到报错原因是 EF Core 在顶级投影之外的任何位置检测到不能转换为服务器的表达式,则会引发运行时异常。
也即是因为服务器不能识别客户端方法DateTime.Parse(q.CreateDate.ToString()).Date,
解决方法是调用 AsEnumerable
或 ToList
等方法(若为异步,则调用 AsAsyncEnumerable
或 ToListAsync
),以显式方式选择进行客户端评估
修正查询如下即可正确运行
var taskInCount = repository.DbContext.Set<Wms_TaskHistory>().AsEnumerable().Where(q => DateTime.Parse(q.CreateDate.ToString()).Date == dateTime && new TaskType[] { TaskType.整盘入库, TaskType.空盘入库, TaskType.补充入库, TaskType.分拣补入 }.Contains((TaskType)q.TaskType)).Count();
标签:Core,CreateDate,EF,TaskType,服务器,入库,客户端 From: https://www.cnblogs.com/xflfc/p/17176291.html