我試圖通過使用Compute
函數與DataTable
得到一個十進制值。我需要的verNumber
列,這將總是是一個整數(1
,2
,3
)或一個地方(1.1
,1.2
,2.3
,3.1
等),一個小數,但也可以落得像1.1.1
的最大值或4.1.2
。它永遠不會像1.0
或2.11
。考慮文檔版本號。DataTable計算對象到十進制
這些數字不需要計算,它們只傳遞給當前接受字符串的函數(但可以很容易地更改),所以包含最大值的字符串應該可以工作,儘管作爲概念驗證I試圖讓它與2
和2.1
這樣的數字一起工作。數據庫表來自(GetVersionsTable() method
)的數據類型是int
,如果這很重要。
如果我嘗試使用帶有小數的代碼,它會抱怨它是無效的轉換。使用int
工作,但顯然刪除小數位,如果它存在。
System.Data.DataTable dt = doc.GetVersionsTable(true) as System.Data.DataTable;
decimal maxVal = (decimal) dt.Compute("MAX(verNumber)", string.Empty);
結果specified cast not valid
我也使用decimal.Parse
具有類似的投訴嘗試。
我試着直接得到一個字符串;
string maxVal = (string) dt.Compute("MAX(verNumber)", string.Empty);
這給了我Unable to cast object type of System.Int32 to type System.String
,這表明它是一個int
,但爲什麼我不能把它轉換爲十進制?
請注意,雖然我很樂意使用Linq來解決這個問題,但我不能,因爲我堅持不支持linq。
如果verNumber列類型爲int,那麼它只是不能容納1.1(不是int),更不用說1.2.3這不是任何種類的數量。 –
我的不好,還有一個標籤欄,其中包含'1.1.2'類型的數字。我會看看我是否可以返回它,因爲它是一個字符串,那麼我可以使用它,用上面的代碼來獲取最大版本號 –