如何动态生成公式并通过使用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)不保留值

我如何修改它来解决这个问题?由于

如何动态生成公式并通过使用linq选择多行来求解它

未经测试的代码,我希望它是正确的…

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来表示什么