【问题标题】:Convert DataTable to Dictionary with enum as column C#将 DataTable 转换为 Dictionary 并将枚举作为列 C#
【发布时间】:2017-03-02 06:33:48
【问题描述】:

有一个枚举即。 CarEnum 具有值 全部 - 1 宝马 - 2 奥迪 - 3

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

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

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

请帮忙。

【问题讨论】:

  • 为什么要 Enum 类型?您没有特定的枚举吗?
  • Enum 是抽象类,无法实例化。
  • 我有特定的枚举。我想根据数据表中的 EnumID 在 Dictionary 中添加 Enum 类型作为列。
  • 然后使用这个特定的枚举而不是枚举类型。
  • 我使用了特定的枚举但无法正常工作。让我再重写一次代码,这样你就不会糊涂了。

标签: c# linq dictionary datatable


【解决方案1】:

据我了解,您只能将特定的原语转换为枚举。

请参阅this link to MSDN

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

编辑: 也许您尝试将零值转换为未在您的枚举中定义的值?

【讨论】:

  • 演员从 Int16 到 Int32 这将是有效的演员,但反之则不然
  • 只要在 Enum 基础类型的范围内,任何值都会被转换为它的整数等价物。因此,即使没有定义零,它也将是有效的,因为它在范围内。请检查我的答案中的图片。
  • 我不明白你为什么这样告诉我
  • 只是想提供正确的信息。没有冒犯:)
  • 不知道 0 件事,谢谢!但是 Int32 的事情呢?
【解决方案2】:

我试过你的第二种方法,对我来说效果很好。

【讨论】:

  • @DownVoters 最好加上理由来帮助改进答案。
猜你喜欢
  • 2021-02-06
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多