如何动态生成公式并通过使用linq选择多行来求解它
本文关键字:选择 linq 动态 何动态 | 更新日期: 2023-09-27 17:53:23
我有一个名为tblCeMaintMatrix.ToArray())的数组,结果为:
[0]: { xValue = 0, Operator = 43 '+' }
[1]: { xValue = 1, Operator = 43 '+' }
[2]: { xValue = 12, Operator = 45 '-' }
我做了一个foreach循环来解决这个问题,但是我遇到了一些错误。我想我把逻辑搞混了。
foreach (var a in tblCeMaintMatrix.ToArray())
{
{
value = operate((a.Operator).ToString(),a.xValue.Value );
}
decimal value2 = value;
}
private decimal operate(String a, Decimal value)
{
Decimal Value = 0;
if (a == "+")
{
Value = value + value;
}
if (a == "-")
{
Value= value - value;
}
if (a == "*")
{
Value = value * value;
}
if (a == "/")
{
Value = value / value;
}
return Value;
}
我的问题是
a)它的作用是:0 + 0 = 0
1 + 1 = 2
12 - 12 = 0
代替0 + 1 -12。
b)不保留值
我如何修改它来解决这个问题?由于
未经测试的代码,我希望它是正确的…
decimal result = 0;
foreach (var a in tblCeMaintMatrix.ToArray())
{
{
result = operate((a.Operator).ToString(),a.xValue.Value,result);
}
}
private decimal operate(String a, Decimal value, Decimal result)
{
switch (a)
{
case "+": result += value; break;
case "-": result -= value; break;
case "*": result *= value; break;
case "/": result /= value; break;
default: result = value; break;
}
return result;
}
编辑忽略第一个操作符,我认为您需要将第一个操作符设置为空,如:
[0]: { xValue = 0, Operator = '' }
[1]: { xValue = 1, Operator = 43 '+' }
[2]: { xValue = 12, Operator = 45 '-' }
查看修改后的Operate方法
现在你只传递一个值给你的operate
方法,并使用它作为两个操作数。您还需要将代码的运行总数传递给函数:
Decimal total = 0;
foreach (var a in tblCeMaintMatrix.ToArray())
{
{
total = operate((a.Operator).ToString(),total, a.xValue.Value );
}
decimal value2 = value;
}
private decimal operate(String a, Decimal left, Decimal right)
{
Decimal Value = 0;
if (a == "+")
{
Value = left + right;
}
if (a == "-")
{
Value= left - right;
}
if (a == "*")
{
Value = left * right;
}
if (a == "/")
{
Value = left / right;
}
return Value;
}
不清楚你在原始函数中使用value2
来表示什么