gpt4 book ai didi

entity-framework-core - EF Core 3.0 Linq 十进制比较(大于或小于)不起作用 - 无法翻译

转载 作者:行者123 更新时间:2023-12-04 09:23:00 24 4
gpt4 key购买 nike

这个曾经在 2.2 中起作用的简单语句在 3.1 中不再起作用。
我收到错误:

var qry = from p in ctx.Shifts where p.StartTime < 1
select p;
var list = qry.ToList(); //This fails
注意 ">"和 "<"都不起作用,但 "=="起作用。
对象如下图
public class Shift
{
public decimal StartTime {get;set;}
public decimal EndTime {get;set;}
}
我收到错误:

System.InvalidOperationException : The LINQ expression 'DbSet.Where(p => p.StartTime < 1)' could not be translated. Either rewrite the query in a form that can be translated, or switch toclient evaluation explicitly by inserting a call to eitherAsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync()

最佳答案

首先,在 EF Core 1.x/2.x 中“工作”而不在 EF Core 3.x+ 中工作只是意味着表达式在客户端上进行了静默计算,现在失败了,因为 EF Core 3.0 删除了隐式客户端评估并要求您使用异常消息的建议选项明确解决它们。
其次,这里的实际问题是您似乎正在使用 SQLite 并点击其 EF Core 之一 Query limitations :

SQLite doesn't natively support the following data types. EF Core can read and write values of these types, and querying for equality (where e.Property == value) is also supported. Other operations, however, like comparison and ordering will require evaluation on the client.

  • DateTimeOffset
  • Decimal
  • TimeSpan
  • UInt64

对于 decimal您可以使用来自同一链接(官方 EF Core 文档)的建议将其映射为 double通过更改属性类型或使用 value converter ,例如
if (Database.IsSqlite())
{
modelBuilder.Entity<Shift().Property(e => e.StartTime).HasConversion<double>();
modelBuilder.Entity<Shift().Property(e => e.EndTime).HasConversion<double>();
}

关于entity-framework-core - EF Core 3.0 Linq 十进制比较(大于或小于)不起作用 - 无法翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63066504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com