Entity framework core EF Core 3.0 Linq十进制比较(大于或小于)不工作-无法转换

Entity framework core EF Core 3.0 Linq十进制比较(大于或小于)不工作-无法转换,entity-framework-core,linq-to-entities,ef-core-3.1,Entity Framework Core,Linq To Entities,Ef Core 3.1,这个在2.2中使用的简单语句在3.1中不再有效。 我得到一个错误: var qry = from p in ctx.Shifts where p.StartTime < 1 select p; var list = qry.ToList(); //This fails 我得到一个错误: var qry = from p in ctx.Shifts where p.StartTime < 1 select p; var list = qry.T

这个在2.2中使用的简单语句在3.1中不再有效。 我得到一个错误:

var qry = from p in ctx.Shifts where p.StartTime < 1
          select p;
var list = qry.ToList(); //This fails
我得到一个错误:

var qry = from p in ctx.Shifts where p.StartTime < 1
          select p;
var list = qry.ToList(); //This fails
System.InvalidOperationException:LINQ表达式“DbSet” .Where(p=>p.StartTime<1)无法翻译。以可以翻译的形式重写查询,或者切换到 通过插入一个调用 AsEnumerable()、AsAsAsyncEnumerable()、ToList()或ToListSync()

首先,EF Core 1.x/2.x中的“工作”和EF Core 3.x+中的“不工作”仅仅意味着表达式在客户端上被静默计算,现在失败了,因为EF Core 3.0删除了隐式客户端计算,并要求您通过异常消息使用建议的选项显式解析它们

第二,这里的实际问题是,您似乎正在使用SQLite并使用它的一个EF核心:

SQLite本机不支持以下数据类型。EF Core可以读取和写入这些类型的值,并且还支持查询相等性(
,其中e.Property==value
)。但是,其他操作(如比较和排序)需要在客户机上进行评估

  • 日期时间偏移
  • 十进制
  • 时间跨度
  • UInt64
对于
decimal
,您可以使用来自同一链接(官方EF核心文档)的建议,通过更改属性类型或使用,将其映射为
double

if(Database.IsSqlite())
{
modelBuilder.Entity e.StartTime).HasConversion();
modelBuilder.Entity e.EndTime).HasConversion();
}

它与SqlServer一起工作,因此可能是数据库提供程序特定的问题。你的目标是什么数据库(提供商)?嗨@Tawani,我无法重现你的问题。你的Ef core的详细版本是什么?你能分享你的数据库设计和你的DbContext吗?使用Sqlite的DB测试。忘了提