LINQ中的计算

时间:2014-04-18 23:19:06

标签: c# linq

我想获得两个十进制值的百分比。它单独给出正确的结果,但是当我添加两个结果值时,它会给出错误的结果。请检查我错在哪里。我正在分享我的代码

public decimal GetTotal()
    {

        decimal? total = 0;
        decimal? total2 = 0;

        decimal? count = 0;
        decimal? count2 = 0;
        decimal? result = 0;
        decimal? loopcount = 0;
        decimal? result1 = 0;
        decimal? result2 = 0;


        total = _db.Carts.Where(c => c.CartId == ShoppingCartId).Select(c => ((int?)c.Count * c.Part.Price)).Sum();
        total2 = _db.Carts.Where(c => c.CartId == ShoppingCartId).Select(c => ((int?)c.Count * c.CustomerPrice)).Sum();

        var cartList = _db.Carts.Where(c => c.CartId == ShoppingCartId).ToList();

        foreach (var item in cartList)
        {

            count = total2.HasValue && item.Percentage.HasValue ? ((total2 / 100) * item.Percentage) - total2 : decimal.Zero; // 960
            count2 = total.HasValue && item.Percentage.HasValue ? ((total / 100) * item.Percentage) - total : decimal.Zero;
            loopcount++;
            result1 += ((-1) * count);
            result2 += ((-1) * count2);
            result += result1.Value + result2.Value;

        }                       
        return result ?? decimal.Zero;            
    }

我想添加如960 + 432 = 1392,但它是3696,请检查

1 个答案:

答案 0 :(得分:1)

最有可能的问题是,您在for循环中重复使用result变量。当你写:

result1 += ((-1) * count);

这相当于:

result1 = result1 + ((-1) * count);

因此,在此点之前将result1之前的任何值添加到((-1) * count),结果将分配回result1。您可能在result2result上遇到类似问题。

解决方案是在您使用它们之后清除变量(将它们重置为0),以便先前的值不会影响后面的计算或声明for循环中的临时变量仅用于在他们需要的范围内。