将对象数组映射到数据表的列

Posted

技术标签:

【中文标题】将对象数组映射到数据表的列【英文标题】:Map an array of objects to a column of a datatable 【发布时间】:2021-09-22 00:59:28 【问题描述】:

是否可以将对象数组存储在数据表的列中?

object[] arr1 = new object[]  "a", false, 100 ;
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
DataRow row = dt.NewRow();
row["Column1"] = arr1;
dt.Rows.Add(row);
// After
foreach (DataRow rowRead in dt.Rows)

    object[] result = rowRead["Column1"];

【问题讨论】:

这闻起来像XY problem。你能解释一下为什么你想这样做吗?您是否真的想解决更深层次的问题,或者您真的对 DataTable 的工作原理感到好奇? 你读过documentation吗? 我有一个不断增长的应用程序的 ToolStrip ... 每个选项都是从具有允许授权的数据表中检索的。我已经开始将整个应用程序迁移到小 dll 中。在某些调用 winform 的情况下,使用了参数。所以我需要在有参数或没有参数的情况下调用 DLL。我在数据表的列中需要的那些参数。如果不可能,我会将数据表迁移到列表 我也很好奇你为什么要这样做。您是否考虑过使用一个 DataSet 和两个带有某种键的 DataTable 来匹配它们?如果是我,我会尽量远离 DataTable,只使用一个带有数组的 POCO,如果可能的话。 【参考方案1】:

您不能将 set 分配给 datatable 列。

您可以将集合转换为字符串并将其分配给列,然后反向执行相同的操作来读取列。

string.Join (Separator, collection) 将集合转换为字符串。 您可以将其输出分配给 DataTable column

object[] arr1 = new object[]  "a", false, 100 ;
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
DataRow row = dt.NewRow();
row["Column1"] = string.Join(",", arr1);
dt.Rows.Add(row);
// After
foreach (DataRow rowRead in dt.Rows)

   object[] result = (rowRead["Column1"].ToString().Split(',')).ToArray<object>();

【讨论】:

我喜欢我的项目的想法。我认为它可以工作。唯一我不知道为什么会发生在我身上的是 row ["Column1"] = string.Join (",", arr1);我大写“False”F。而不是“false”。 对不起。如果我只是阅读文档并从 bool 到 string 第一个字母大写 将数组或列表的组成部分转换为字符串,其中行 ["Column1"] = string.Join (",", arr1); .第一个参数是值分隔符,第二个参数是数组或列表

以上是关于将对象数组映射到数据表的列的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:将单个对象映射到现有数组

使用 AlamofireObjectMapper 将对象 json 数据映射到 2 个单独的数组中

ES6 将对象数组映射到数组

Clickhouse - 将数组映射到要排序的列

使用 ValueInjecter 将字符串数组映射到对象

Restkit:将数组映射到对象