无法将类型为'System.Int16'的对象强制转换为'System.String' - AsEnumerable()。ToDictionary

时间:2012-12-23 19:01:40

标签: c# linq casting

Dictionary<string, DataRow> dtUsers;
using (DataSet dsmyTable = DbConnection.db_Select_Query
                     ("use myDb select * from myTable"))
{
    dtUsers= dsmyTable .Tables[0].AsEnumerable().
         ToDictionary(row => row.Field<string>("UserId"));
}

好的UserId是smallint列 但我想把它作为字符串。

我应该如何修改上面的linq?

2 个答案:

答案 0 :(得分:6)

您不能将int转换为字符串,但您可以获取int的字符串表示形式:

dtUsers= dsmyTable .Tables[0].AsEnumerable().
         ToDictionary(row => row.Field<short>("UserId").ToString());

但是,您只应将其用于显示目的。一般来说,你需要尽可能长时间地保持int,因为处理int更容易,而不是从字符串中解析它。

答案 1 :(得分:1)

只需使用ToString()方法即可。当然,这仅适用于您的smallint列。

dtUsers= dsmyTable .Tables[0].AsEnumerable().
         ToDictionary(row => row.Field<short>("UserId").ToString());