LINQ到实体的LINQ与对象的LINQ的Math.Round

时间:2018-10-30 17:21:17

标签: c# entity-framework entity-framework-6

以下行为是不同的,并且难以管理,具体取决于是否执行查询:

using (var db = new DbContext()) 
{
    db.Entities.Select(x => Math.Round(0.5)).First(); // return 1
    db.Entities.ToList().Select(x => Math.Round(0.5)).First(); // returns 0
    db.Entities.AsEnumerable().Select(x => Math.Round(0.5)).First(); // returns 0
} 

当然,我的实际代码在x上执行了一个操作。这是为了简单起见。

我知道有Math.Round with MidpointRounding,但是Linq to Entities不支持它:

  

LINQ to Entities无法识别方法'Double Round(Double,   System.MidpointRounding)方法,并且该方法无法翻译   进入商店表达式。

我的问题是,除了执行查询和在内存中舍入外,还有没有办法在c#和Linq to Entities中具有相同的行为?

是否可以将Math.Round的默认行为设置为始终使用MidpointRounding.AwayFromZero

1 个答案:

答案 0 :(得分:0)

基于对this question的回答,看来您所要求的是不可能的。该问题的答案还建议您使用AsEnumerable来获取数据,就像对该问题的其他评论一样,并使用本地查询对内存中的数据进行四舍五入。

var rawData = db.Entities.Select(x => 0.5); 
var rounded =  rawData.AsEnumerable().Select(x => Math.Round(x, MidpointRounding.AwayFromZero));
相关问题