2016-10-20 55 views
1

我有一個使用LINQ查詢來訪問一個簡單的數據集表中的一些數據的一些C#代碼奇怪的行爲:LINQ DataRowExtensions.Field <int>必須是<decimal>?

var rowConfig = from row in dsConfig.Tables[0].AsEnumerable() 
          where row.Field<string>("SERVICE").ToUpper().Contains(trackedServType) 
          select row; 

       seqMin = Convert.ToInt32(rowConfig.FirstOrDefault().Field<decimal>("ROYAL_MAIL_SEQ_MIN")); 

如果我寫FirstOrDefault().Field<int>我在運行時獲取一個InvalidCastException,

出於某種原因它必須是decimal

「服務」 是在爲T SQL數據庫

+0

你爲什麼覺得這很奇怪?您傳遞給'Field ()'方法的類型'T'必須匹配['DataColumn.DataType'](https://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.datatype( v = vs.110).aspx)屬性 –

回答

1

在SQL Server Numeric數據類型轉換成decimal在.NET一個numeric類型。您可以看到完整的轉換列表here

您正在收到該錯誤,因爲在C#中十進制和​​其他任何數字類型之間不存在隱式轉換。您可以看到implicit conversions here的列表以及explicit conversions here的列表。

+0

很好,完美地回答了我的問題,在MSDN上找不到任何內容.Field Rob

+0

@Rob樂於提供幫助。請確保提供您認爲有幫助或好的答案和問題(並在答案爲自己的問題的情況下,將正確的答案標記爲正確)。 – pquest

相關問題