如何从单个DataRow元素中提取值数组?

时间:2015-09-04 21:31:08

标签: c# arrays postgresql datarow

我在搜索这个问题时遇到了麻烦,因为术语数组给了我一百万个不相关的结果,专注于将整个DataRow转换为数组。这是一个简单的代码示例。 drUserDataRow个对象。

User dcUser = new User();

dcUser.UserID = Convert.ToInt32(drUser["user_id"].ToString());

这给了我一个整数值没问题。但我在另一个元素中有一个值数组,例如{1,2,3,4,5}。当我尝试做类似这样的事情时:

dcUser.SystemIDs = drUser["system_ids"].ToString();

它为我提供了该值数组(System.Int32[])的类型,而不是所有实际值。它甚至没有告诉我该结果中的元素数量。我以为我可以这样做:

dcUser.SystemIDs = drUser["system_ids"][0].ToString();

基本上创建一个循环来迭代并获取每个值,但这种语法并不好。

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ语法构建字符串,假设您希望字符串位于SystemID中。由于drUser["system_ids"]会返回int[],我们可以使用:

 string res = "";
 drUser["system_ids"].ToList().ForEach((int i) => res += i + " "); 

可能有更好的方法,而不必先创建临时变量并直接返回结果。 如果您不希望这是一个空格分隔的字符串,为什么不让SystemID成为int[]并直接在其中存储drUsers["system_ids"]

答案 1 :(得分:0)

我最终使用此代码获取了值:

User dcUser = new User();
int[] anSystemIDs = (int[])drUser["system_ids"];
string strSystemIDs = "";
dcUser.UserID = Convert.ToInt32(drUser["user_id"].ToString());
for (int i = 0; i < anSystemIDs.Length ; i++)
{
    strSystemIDs += anSystemIDs[i].ToString() + ", ";
}
dcUser.SystemIDs = strSystemIDs.Substring(0, strSystemIDs.Length - 2);