C# LINQ中小数的比较
我试图通过一列存储销售价值的小数来过滤我的数据库C# LINQ中小数的比较,c#,linq,asp.net-core,entity-framework-core,C#,Linq,Asp.net Core,Entity Framework Core,我试图通过一列存储销售价值的小数来过滤我的数据库 公共类秩序 { [DisplayFormat(DataFormatString=“{0:N2}”)] 公共十进制值{get;set;} ... } 这是我试过的LINQ orders = orders.Where(x => x.SalesValue >= 10000.00M); 但是,这会产生错误: InvalidOperationException:LINQ表达式“DbSet.Where(o =>o.SalesValue>=10
公共类秩序
{
[DisplayFormat(DataFormatString=“{0:N2}”)]
公共十进制值{get;set;}
...
}
这是我试过的LINQ
orders = orders.Where(x => x.SalesValue >= 10000.00M);
但是,这会产生错误:
InvalidOperationException:LINQ表达式“DbSet.Where(o
=>o.SalesValue>=10000.00)“无法转换
这根本不过滤
Decimal value = new Decimal(10000);
Where(x => Decimal.Compare(x.SalesValue, value) >= 0);
如何过滤十进制列?如果进一步查找错误,您应该使用Microsoft Link来告诉错误的确切原因!在我的例子中,当我尝试你的代码时,我得到了下面的
异常
“LINQ表达式”在哪里(
资料来源:DbSet,
无法翻译谓词:(v)=>v.SalesValue>=10000.00)。或者以可以翻译的形式重写查询,
或者通过插入对的调用显式切换到客户端评估
AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或
ToListSync()。寻找
更多信息。”
如果我们转到链接并探索您所面临的问题
有一种方法太过实用——如果您的数据量很小,可以使用以下方法:
var orders = _context.Values.AsEnumerable().Where(x => x.SalesValue >= 10000.00M).ToList();
根据您的数据和业务模式,您可能还需要考虑一些其他因素,您可以从上面的链接进一步获取信息
作为一般规则,实体框架核心尝试对查询求值
尽可能多地在服务器上运行。EF Core转换部分查询
转换为参数,它可以在客户端对这些参数进行评估。其余的
查询(以及生成的参数)将提供给
数据库提供程序,以确定要执行的等效数据库查询
在服务器上进行评估
如果您进一步查找错误,您应该让Microsoft Link告诉您错误的确切原因!在我的例子中,当我尝试你的代码时,我得到了下面的
异常
“LINQ表达式”在哪里(
资料来源:DbSet,
无法翻译谓词:(v)=>v.SalesValue>=10000.00)。或者以可以翻译的形式重写查询,
或者通过插入对的调用显式切换到客户端评估
AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或
ToListSync()。寻找
更多信息。”
如果我们转到链接并探索您所面临的问题
有一种方法太过实用——如果您的数据量很小,可以使用以下方法:
var orders = _context.Values.AsEnumerable().Where(x => x.SalesValue >= 10000.00M).ToList();
根据您的数据和业务模式,您可能还需要考虑一些其他因素,您可以从上面的链接进一步获取信息
作为一般规则,实体框架核心尝试对查询求值
尽可能多地在服务器上运行。EF Core转换部分查询
转换为参数,它可以在客户端对这些参数进行评估。其余的
查询(以及生成的参数)将提供给
数据库提供程序,以确定要执行的等效数据库查询
在服务器上进行评估
EF核心版本?因为
其中(x=>x.SalesValue>=10000.00M)
在EFC3.1.5中可以完美地翻译。另外,我们确定您没有忽略列吗?@IvanStoev我使用的是3.1.4,不要认为我忽略了它,不确定首先如何忽略列您使用[NotMapped]
属性或modelBuilder.Entity().Ignore(x=>x.SalesValue)
忽略它。无论如何,事实上,你们的两个例子都是我这边翻译的。你们使用的是SQL Server还是SQLite?我使用的是SQLite,我认为这可能与itI有关。我使用的是SqlServerEF核心版本?因为其中(x=>x.SalesValue>=10000.00M)
在EFC3.1.5中可以完美地翻译。另外,我们确定您没有忽略列吗?@IvanStoev我使用的是3.1.4,不要认为我忽略了它,不确定首先如何忽略列您使用[NotMapped]
属性或modelBuilder.Entity().Ignore(x=>x.SalesValue)
忽略它。不管怎样,实际上你的两个例子都是我的翻译。你使用的是SQL Server还是SQLite?我使用的是SQLite,我认为这可能与itI有关。我使用的是SqlServer