我正在使用此查询来计算金额的总和并将其显示在标签中。仅仅因为我在字符串中使用它不显示值?有什么建议吗?
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.Globalization
的NumberStyles
枚举可用于将美元金额解析为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
,因此您不需要检查计数是否0
的if
块:
// 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;