计算列的总和并显示在标签中

时间:2014-03-31 10:28:45

标签: c# linq

我正在使用此查询计算金额总和并将其显示在标签中。仅仅因为我在字符串中使用它没有显示值?有什么建议吗?

string a;

var query = from r in dt.AsEnumerable()
            where r.Field<string>("Code") == strCode
            select decimal.Parse(
                r.Field<string>("Amount")
                .Replace("$", "")
                .Replace(",", "")
            );

if (query.Count() == 0)
{
    a = "0";
}
else
{
    foreach (var item in query)
    {
        a = item.ToString();
    }
}

return a;

2 个答案:

答案 0 :(得分:1)

解析金额

来自System.Globalization的{​​{3}}枚举可用于将美元金额解析为decimals

decimal.Parse(r.Field<string>("Amount"), NumberStyles.Currency)

另见NumberStyles

汇总美元金额

此外,您的for循环实际上并未添加任何金额,它只是将每个金额分配给a变量,因此a仅等于最后的金额:

foreach (var item in query)
{
    a = item.ToString();
}

return a;

您真正想做的是 添加 金额:

decimal a = 0;

foreach (var item in query)
{
    a = a + item;
    // Or even shorter:
    a += item;
}

return a.ToString();

与LINQ

求和

但是LINQ提供了方法Problem parsing currency text to decimal type,它可以用来完全取代for循环。此外,当在空集小数上调用Sum()时,它已经返回0,因此您不需要if块来检查计数是否为{{} 1}}:

0

Altogther现在......

所以把它们放在一起,你得到下面的代码:

// Don't need this IF block
if (query.Count() == 0)
{
    a = "0";
}

return query.Sum().ToString();

答案 1 :(得分:-1)

试试这个,

您需要使用Sum来获得总金额

string TotalSum = "";
var query = from r in dt.AsEnumerable()
        where r.Field<string>("Code") == strCode
        select decimal.Parse(r.Field<string>("Amount"), System.Globalization.NumberStyles.Any);
if (query.Count() > 0)
{
TotalSum = string.Format("{0:C}", query.Sum());
}
Label1.Text = TotalSum;