2016-10-20 54 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

相关问题