获取"could not be translated. Either rewrite the query in a form that can be translated",.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);

相关内容

最新更新