我正在使用此查询计算金额总和并将其显示在标签中。仅仅因为我在字符串中使用它没有显示值?有什么建议吗?
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;
答案 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提供了方法Problem parsing currency text to decimal type,它可以用来完全取代for循环。此外,当在空集小数上调用Sum()
时,它已经返回0
,因此您不需要if
块来检查计数是否为{{} 1}}:
0
所以把它们放在一起,你得到下面的代码:
// 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;