存储过程:如何在EF和ASP.NET MVC中返回小数

时间:2014-08-23 19:24:12

标签: sql asp.net-mvc entity-framework isnull

我创建了一个这样的存储过程:

SELECT 
    ISNULL(SUM(p.Amount), 0.00)
FROM 
    Payments p
LEFT JOIN 
    TenantTenancies tt ON tt.TenancyId = p.TenancyId
INNER JOIN 
    Tenant t ON t.Id = tt.TenantId
WHERE 
    t.UserId = @UserId 
    AND p.IsTenant = 1 
    AND p.Date < @StartDate

我希望它在ASP.NET MVC中做的是返回decimal,但是它一直返回INT,如何让它返回decimal?这是SQL或ASP.NET MVC方面的问题吗?

我知道我可以使用标量decimal,但这会将其转换为ObjectResult(Decimal)我希望它能返回decimaldecimal?。如果我单击返回一个NONE的集合,它只是默认转到int但它在页面上正常工作没有问题它只是我希望它返回正确的值24.45例如。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

嗯,问题是:EF怎么知道你只返回 decimal?存储过程返回结果集 - 可能是任意数量的行,任意数量的列。

这就是为什么你得到一个ObjectResult<decimal?>。如果知道这只会包含一个带有一个小数的行 - 那么只需使用.SingleOrDefault,如果这返回的值不是null,那么你得到的结果是:

ObjectResult<decimal?> results = ctx.GetDecimal();

if (result != null)
{
    decimal? theResult = result.SingleOrDefault();

    if(theResult != null)
    {
       decimal resultValue = theResult.Value;
    }
}