我有一个包含字符串值但是数字/整数
的gridview例如:“1”,“10”
问题是我的数据也是-
,因为它的char不能转换为整数。
这是我的lambda的一行:
var gp_lt = gridData.Where(n => n.Profit != "-" && Convert.ToInt32(n.Profit) >= 0).Select(o => new { o.Profit });
double grossprofit_LT = gp_lt.Sum(o => Convert.ToDouble(o.Profit));
Profit = number
但是string
...
-
的值不是0
...只想排除所有拥有-
并将利润转换为int
的人。提前谢谢!
答案 0 :(得分:0)
尝试:
double grossprofit_LT = gridData.Select(x =>
{
var styles = NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint;
if (x.Profit.StartsWith("-"))
return (double?) double.Parse(x, styles);
if (x.Profit.Contains('.'))
return (double?) double.Parse(x,styles, CultureInfo.InvariantCulture);
var seperator = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
if (x.Profit.Contains(',') && seperator == ",")
return (double?) double.Parse(x, styles);
return null;
}).Where(x => x.HasValue).Sum(x => x.Value);
这将处理所有值,如:
-3
-2.23
1,15
并返回你的总和。如果你不想包含负数,只需删除第一个条件。 if (x.Profit.StartsWith("-"))
更新:如果您想让它更简单,并且您的值不包含任何点或逗号,您可以使用
gridData.Where(x => !x.Profit.Contains("-"))
.Select(x => double.Parse(x.Profit.Trim())
.Sum();
您在代码中将Profit
与-
进行了比较。但是您的某些值可能以-
开头,因此您将获得格式异常。使用Contains
或而是StartsWith
方法。
答案 1 :(得分:0)
您的问题源于您在第一个陈述中有这一行:
Convert.ToInt32(n.Profit)
如果您尝试转换的字符串实际上不是整数,那么会抛出异常。由于您显然处理的是利润,因此您很可能获得了小数。
将上面的内容替换为此,您的代码应该有效:
Convert.ToDecimal(n.Profit)
(我建议使用 Decimal
而不是 Double
when dealing with money 。)