浮点精度错误 LINQ vs Query

Float presicion error LINQ vs Query

我们将从使用 Dapper 转向使用 Entity framework。有这种方法应该 return 给定 Id 的升数。

示例:

|-----|--------|
| Id  | Litres |
|-----|--------|
|  1  | 2.75   |
|-----|--------|
|  1  | 2.113  |
|-----|--------|
|  2  | 1.23   |
|-----|--------|

在这种情况下,结果应为:

id: 1 SumLitres: 4.863 id: 2 SumLitres: 1.23

在实际情况下,有数千个条目,使用 dapper 和 Linq 时,这些条目之和的精度不同。我们可以接受 3 位小数精度,但不能低于它。

精巧的查询:

const string query = @"
            SELECT Id, Sum(Litres) as Litres
            FROM Litres
            GROUP BY Id;

linq 查询:

context.Litres.Select(x => new { x.Id, x.Litres})
                    .GroupBy(x => x.Id)
                    .AsNoTracking()
                    .ToList() 
                    .Select(g => new { Id = g.Key, Litres = g.Sum(s => s.Litres) })
                    .ToList();

问题是结果在小数点后第二位不同,我不知道要查询的哪一个结果的精度最高?

谁知道怎么提高精度或者哪个精度最高?

列升的数据类型为:实数。

很可能在从 SQL Real 转换为 .Net Single 时有一些舍入:Sql server real datatype, what is the C# equivalent?

您可以尝试使用实体上下文执行原始 SQL:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx