Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ中小数的比较_C#_Linq_Asp.net Core_Entity Framework Core - Fatal编程技术网

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