【问题标题】:How to convert List of objects to a specific type Array in C#如何在 C# 中将对象列表转换为特定类型的数组
【发布时间】:2018-09-20 23:40:06
【问题描述】:

我们有第三方Test类,它有一个方法“Convert”,它只接受DataSample数组。

public class Test{
public class DataSample{

public int testVar{get;set;}
public int testVar2{get;set;}
}
//some methods

public static List<someType> Convert(DataSample[] data)
{
  //execute some steps 
}

}

我们有一个存储过程,它给出以下输出。它基本上将对象创建结构存储在 col1 字段中

Id  col1
1   new Test.DataSample{ testVar=24,testVar=11}
2   new Test.DataSample{ testVar=26,testVar=15}
3   null
4   null
5   new Test.DataSample{ testVar=28,testVar=11}

我正在尝试通过提供 DataSample 类型对象的数组来创建一个类并调用 Test 类的 Convert 方法。 数据类型对象如上所述存储在 col1 字段中。

Public class ImplementTest{

public void CallConvert(){
var inputs = new Test.DataSample[] { };
// get the data from DB in list
            List<object> InputList = new List<object>();
            using (SqlConnection con = new SqlConnection(conString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {

                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.CommandText = "dbo.ReadAll_Input";

                    con.Open();

                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            InputList.Add(dr["col1"]);
                        }
                    }
                }
            }
             //remove null
            InputList.RemoveAll(x => x ==  DBNull.Value);

            //create an array of Test.DataSample type
             ??

          //call third party class
          var ourput = Test.Convert(inputs).ToArray();


}
}

如何将 InputList 的所有对象传递给输入数组,以便它可以传递给只接受 DataSample 类型数组的第三方方法 Convert()?

或者有没有一种直接的方法可以在从存储过程中获取对象时创建一个 DataSample 类型的数组。

请问有什么提示吗?

谢谢!

【问题讨论】:

  • 所以我想这不起作用,因为您试图将字符串 "new Test.DataSample{ testVar=24,testVar=11}" 添加到 DataSample 类型的数组中?
  • @stuartd,没错。
  • 那么存储在数据库中的文本是一个表达式..?解析和调用时应该给你一个 DataSample 的实例?
  • @Dave,是的。它存储在第三方中,我们只能运行 SQL 查询和过程。

标签: c#


【解决方案1】:

我们有一个存储过程,它给出以下输出

哇...这... 有趣 (1)

无论您在这里尝试做什么,都注定要失败。让您的数据库完成它们的工作并提供特定的值,例如两列,一列带有 testVar,另一列带有 testVar2。然后在您的代码中构建一个new TestData 并分配这两个值。

如果您无法更改数据库接口(在这种情况下,我强烈建议您考虑不与为下一个项目设计它的人合作)然后至少使用正则表达式,解析出两个值,然后自己创建对象在你的代码中。

有两种或三种不同的方法可以完成这项工作,但都比它的价值更复杂。从数据库中获取数据并从中构建对象是非常基础的,当已有的轮子可用时,您不应该重新发明黑洞量子引擎反重力场。

(1) (为了不违反新的 CoC,我将保留它)

【讨论】:

  • 是的,我们没有那种可以更改它的访问级别。它是一个巨大的表,有数千条记录。我将通过解析方法检查。谢谢!
猜你喜欢
  • 2019-04-10
  • 2015-03-26
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多