2011-04-27 35 views
0

嗨選擇多行solive它我有的結果稱爲tblCeMaintMatrix.ToArray())的數組:如何動態生成的公式和通過使用LINQ

[0]: { xValue = 0, Operator = 43 '+' } 
[1]: { xValue = 1, Operator = 43 '+' } 
[2]: { xValue = 12, Operator = 45 '-' } 

我提出foreach循環來解決但是,我遇到了一些錯誤。我想我困惑這個邏輯..

​​

我的問題是,

一)什麼是確實是這樣的:

0 + 0 = 0

1 + 1 = 2

12 - 12 = 0

而不是0 + 1 -12。

b)它不保留該值。

我該如何修改這個來解決問題?謝謝

回答

2

未測試的代碼,我希望它是正確的..

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 '-' } 

並查看修改的操作方法。

+0

謝謝!我認爲這解決了我的問題。 – anonymous1110 2011-04-27 03:52:13

+0

嗨丹尼,有沒有辦法讓我忽略陣列的第一個索引的操作符?使這樣的等式0 + 1 -12而不是0 + 0 +1 - 12 – anonymous1110 2011-04-27 04:33:05

+0

請參閱我的編輯.... – 2011-04-27 05:48:42

0

現在你只是將一個值傳遞給你的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在原始函數來表示什麼。