使用枚举作为列C#将DataTable转换为Dictionary

时间:2017-03-02 06:33:48

标签: c# linq dictionary datatable

有一个Enum即。 CarEnum有价值 全部 - 1 宝马 - 2 奥迪 - 3

我从数据库

获取此DataTable
DataTable dt = new DataTable();
dt.Columns.Add("ID", long);
dt.Columns.Add("EnumID", Int16);

我想将此表格转换为DictionaryEnumIDEnum

字典格式

Dictionary<long, CarEnum> _Record = new Dictionary<long, CarEnum>();

我尝试了以下代码,但它们不是

_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"));

这两个代码都不起作用,并且特定的异常转换无效。

请帮忙。

2 个答案:

答案 0 :(得分:0)

根据我的理解,你只能将特定的原语转换为枚举。

请参阅this link to MSDN

在转换为枚举之前,使用short而不是Int16或将Int16转换为short。

编辑: 也许你试图抛出零值并且它没有在你的枚举中定义?

答案 1 :(得分:0)

我已尝试过你的第二种方法,它对我来说很好。

enter image description here