无法将“System.Int16”类型的对象强制转换为“System.String”类型

时间:2013-08-26 10:59:10

标签: c# asp.net linq casting .net

我在LINQ查询中遇到以下异常。

  

无法将'System.Int16'类型的对象强制转换为'System.String'。


 var query = from t in dt.AsEnumerable()
                        select new
                        {
                            sys_db= t.Field<Int16>("process_id").ToString() + "|" + t.Field<string>("db_code").ToString(),
                            process_name = t.Field<string>("process_name").ToString()
                        };

为什么会出现此问题以及如何解决此问题?

2 个答案:

答案 0 :(得分:2)

t.Field<string>("db_code").ToString()

或许应该是这样的:

t.Field<short>("db_code").ToString()

或同等的

t.Field<Int16>("db_code").ToString()

答案 1 :(得分:1)

  

为什么会出现此问题

这是因为您尝试将Int16字段读取为字符串,这是不允许的

  

如何解决它

首先确定实际上是int16的字段,并且您正在读取字符串。从您的代码中,很可能是这个字段

t.Field<string>("db_code")

您需要将其更改为

t.Field<Int16>("db_code")