【发布时间】:2017-06-28 10:56:54
【问题描述】:
我正在尝试准备一个字典,其中包含 COLUMN_NAME 作为键和 {IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH} 作为值。
这是我到目前为止所做的。
Dictionary<string, object> dict = new Dictionary<string, object>();
var dt = GetDataTable($"SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='{tableName}'");
if (dt != null)
{
dict = dt.AsEnumerable().ToDictionary(row => row.Field<string>(0), row => new { IS_NULLABLE = row.Field<bool>(1), DATA_TYPE = row.Field<string>(2), CHARACTER_MAXIMUM_LENGTH = row.Field<int>(3) });
}
GetDataTable 函数未在此处列出,可以正常工作并返回一个有效的System.Data.DataTable。
编译器抛出...
错误 CS0029:无法将类型“System.Collections.Generic.Dictionary>”隐式转换为“System.Collections.Generic.Dictionary”
问题是,如何生成具有这些属性的匿名对象 -
IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH?
【问题讨论】:
-
你为什么不创建一个类
DbColumn呢?那么你的字典就是Dictionary<string, DbColumn> -
是的,这很容易解决。我知道。但我想使用匿名类型来实现这一点。
-
为什么?这不仅仅是一个修复,它是一种更好的方法,因为您可以将该字典用作类中的字段或将其作为参数传递。您也可以稍后扩展它或提供方法。与
object相比,您还具有编译时安全性,并且无需强制转换即可访问属性。 -
以后不需要扩展了。它是临时对象,我只想检查列是否确认数据类型和字符限制。如果可以使用匿名类型进行管理,我不想在我的项目中再添加一个类。
标签: c# linq dictionary