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

  • 本文关键字:显示 标签 计算 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;

解析美元金额

System.GlobalizationNumberStyles枚举可用于将美元金额解析为decimals

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

另请参阅将货币文本解析为十进制类型时出现问题。

美元金额求和

此外,您的 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 提供了可用于完全替换 for 循环的方法Sum()。此外,当在一组空的小数上调用 Sum() 时,它已经返回 0 ,因此您不需要检查计数是否0if块:

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

阿尔托格特现在...

因此,将它们

放在一起,您将获得以下代码:

// Top of file...
using System.Globalization;
// In your method...
var query =
    from r in dt.AsEnumerable()
    where r.Field<string>("Code") == strCode
    select decimal.Parse(r.Field<string>("Amount"), NumberStyles.Currency);
return query.Sum().ToString();

试试这个,

您需要使用总和来获取总金额

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;

相关内容

  • 没有找到相关文章

最新更新