C# 将DataTable转换为enum为C列的字典#

C# 将DataTable转换为enum为C列的字典#,c#,linq,dictionary,datatable,C#,Linq,Dictionary,Datatable,有一个枚举,即。有价值的苔草 全部-1 宝马-2 奥迪-3 我正在从数据库中获取此数据表 DataTable dt = new DataTable(); dt.Columns.Add("ID", long); dt.Columns.Add("EnumID", Int16); 我想将此表转换为字典,使用EnumID作为Enum 字典格式 Dictionary<long, CarEnum> _Record = new Dictionary<long, CarEnum>();

有一个枚举,即。有价值的苔草 全部-1 宝马-2 奥迪-3

我正在从数据库中获取此数据表

DataTable dt = new DataTable();
dt.Columns.Add("ID", long);
dt.Columns.Add("EnumID", Int16);
我想将此表转换为
字典
,使用
EnumID
作为
Enum

字典格式

Dictionary<long, CarEnum> _Record = new Dictionary<long, CarEnum>();
Dictionary\u Record=newdictionary();
我尝试了以下代码,但它们不是

_Record = dt.AsEnumerable().ToDictionary<DataRow, long, CarEnum>(row => row.Field<long>("ID"), row => (CarEnum)Enum.ToObject(typeof(CarEnum), row.Field<Int16>("EnumID")));
_Record = dt.AsEnumerable().ToDictionary<DataRow, long, CarEnum>(row => row.Field<long>("ID"), row => (CarEnum)(int)row.Field<Int16>("EnumID"));
\u Record=dt.AsEnumerable().ToDictionary(row=>row.Field(“ID”),row=>(CarEnum)Enum.ToObject(typeof(CarEnum),row.Field(“EnumID”);
_Record=dt.AsEnumerable().ToDictionary(row=>row.Field(“ID”),row=>(CarEnum)(int)row.Field(“EnumID”);
这两个代码都不工作,并且获取的特定于异常的强制转换无效


请提供帮助。

据我所知,您只能将特定的原语强制转换为enum

请看

使用short而不是Int16,或在强制转换为enum之前将Int16强制转换为short

编辑:
也许您试图强制转换零值,但它没有在枚举中定义?

我已经尝试了您的第二种方法,它对我来说很好


为什么要使用枚举类型?您没有指定的枚举吗?
enum
是一个抽象类,无法实例化。我有指定的枚举。我想根据datatable中的EnumID将字典中的Enum类型添加为列。然后使用此特定的Enum而不是Enum类型。我使用了特定的Enum但不起作用。让我再次重写代码,这样您就不会感到困惑。强制转换是从Int16到Int32的,这将是一个有效强制转换,但不是相反。只要它在枚举基础类型的范围内,任何值都将强制转换为它的整数等价项。因此,即使没有定义零,它也将是有效的,因为它在范围内。请检查我答案中的图片。我不明白你为什么告诉我只是想提供正确的信息。无意冒犯:)我不知道0的事,谢谢!但是Int32呢?@down选民最好添加原因来帮助改进答案。