【问题标题】: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,如果可能的话。

标签: c# arrays object datatable


【解决方案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); .第一个参数是值分隔符,第二个参数是数组或列表
猜你喜欢
  • 2019-01-16
  • 2021-05-18
  • 2021-04-18
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多