c# - 获取“无法翻译。要么以可翻译的形式重写查询”,.NET Corel 中的异常
问题描述
我正在开发一个 C# 应用程序。我必须创建一个谓词来过滤数据。我有一个模型类TissueItem
,它有一个名为ExpirationData
. TissueItem
我必须从到期日期小于或等于指定数字的地方获取该数据。我的谓词表达式是:
ExpressionStarter<TissueItem> predicate = PredicateBuilder.New<TissueItem>();
predicate = predicate.And(x =>
Convert.ToInt32((x.ExpirationDate.Value - DateTime.Today).TotalDays)
<= inventorySearchFilterModel.ExpirationStatus);
当我通过这个谓词来获取数据时,我得到了以下异常:
The LINQ expression 'DbSet<TissueItem>()
.Where(t => Convert.ToInt32((t.ExpirationDate.Value - DateTime.Today).TotalDays) <= __inventorySearchFilterModel_ExpirationStatus_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
可能是什么问题。我正在使用 .NET Core 3.1。
解决方案
试试这个变种。看起来EFC不处理Timestamp.TotalDays
。
var predicate = PredicateBuilder.New<TissueItem>();
predicate = predicate.And(x =>
EF.Functions.DateDiffDay(x.ExpirationDate.Value, DateTime.Today)
<= inventorySearchFilterModel.ExpirationStatus);
推荐阅读
- python - time.perf_counter() 或 time.process_time() 用于性能测量?
- php - Laravel 7:为什么我的会话 cookie 没有在浏览器中设置?
- python - py2app 找不到 Python 框架
- database - MongoDB中的数据库项目
- css - Blogdown::build_site 看不到自定义 css 文件
- c# - 如何模拟具有统一二维重力的动态轨道(现实)
- c# - Blazor WebAssembly:将 Float32Array 从 javascript 发送到 .NET
- kivy - dlopen 失败:“/data/data/org.test.solvescan/files/app/_python_bundle/site-packages/cv2/cv2.so”是 64 位而不是 32 位
- java - 为什么运行单元测试时没有触发spring boot的@Retryable?
- c# - 具有多个参数的 OData 控制器方法