【问题标题】:How to append items of one list to another having same structure如何将一个列表的项目附加到另一个具有相同结构的项目
【发布时间】:2017-01-01 12:31:34
【问题描述】:

我有 2 个相同结构的列表,如下所示:

List<OUT_POMONTOCARLOLOCALDATA> items = new List<OUT_POMONTOCARLOLOCALDATA>();

OUT_POMONTOCARLOLOCALDATA root = new OUT_POMONTOCARLOLOCALDATA { id = 1, parent = 0, text = "Initiate" };
items.Add(root);

root = new OUT_POMONTOCARLOLOCALDATA { id = 11, parent = 1, text = "Parts Selection" };
items.Add(root);

root = new OUT_POMONTOCARLOLOCALDATA { id = 12, parent = 1, text = "Assumptions" };
items.Add(root);

现在我想附加另一个来自数据库并具有相同结构的列表

CREATE_ANALYSIS_SP_POPULATE_ANALYSISDATA fetchresult = this.domain.PopulateAnalysisData(input);

The fetchResult Contains OUT_POMONTOCARLODATA

这 2 个列表必须是最终列表,返回应该是 OUT_POMONTOCARLODATA,其中包含所有硬编码和数据库数据。..

类结构如下:

public partial class OUT_POMONTOCARLOLOCALDATA 
{       
    public System.Nullable<System.Decimal> parent { get; set; }
    public System.Nullable<System.Decimal> id { get; set; }
    public System.String text { get; set; }
}

public partial class OUT_POMONTOCARLODATA
{       
    public System.Nullable<System.Decimal> parent { get; set; }
    public System.Nullable<System.Decimal> id { get; set; }
    public System.String text { get; set; }
}

public partial class CREATE_ANALYSIS_SP_POPULATE_ANALYSISDATA 
{      
   public List<OUT_POMONTOCARLOLOCALDATA> OUT_POMONTOCARLOLOCALDATA { get; set;}
   public List<OUT_POMONTOCARLODATA> OUT_POMONTOCARLODATA { get; set; }
}

我尝试使用以下代码但遇到了一些问题

items.AddRange(fetchresult.OUT_POMONTOCARLODATA);

【问题讨论】:

  • 你是什么意思但有一些问题 - 请解释一下。还有fetchresult.OUT_POMONTOCARLODATA - 那是什么类型的?顾名思义,它看起来像一个单一的对象。通过使用Range 看起来像一个集合
  • 它说 AddRange 有一些无效的参数
  • 请出示CREATE_ANALYSIS_SP_POPULATE_ANALYSISDATA
  • fetchresult.OUT_POMONTOCARLODATA : 它是从 Oracle 返回的游标
  • @Gilad Green..我已经添加了课程

标签: c# oracle


【解决方案1】:

@SantyEssac :正确查看代码后 我观察到您错误地给出了 items.AddRange(fetchresult.OUT_POMONTOCARLODATA);而不是 items.AddRange(fetchresult.OUT_POMONTOCARLOLOCALDATA);

列表类型为 OUT_POMONTOCARLOLOCALDATA,但您要添加 OUT_POMONTOCARLODATA。

请尝试以下方法: items.AddRange(fetchresult.OUT_POMONTOCARLOLOCALDATA)

【讨论】:

    【解决方案2】:

    问题是您尝试使用AddRange 将Oracle 游标附加到其他类型的列表中。首先读取从光标返回的所有行,将它们转换为您的 C# 类型,然后将它们添加到列表中。

    类似的东西:

    OracleCommand cmd = new OracleCommand(connectionObject);
    cmd.CommandText = "Oracle_PkrName.Stored_Proc_Name";
    cmd.CommandType = CommandType.StoredProcedure;
    //Add parameters that are needed
    //Then add the output cursor:
    objCmd.Parameters.Add("YourCursorNameInProcedure", OracleType.Cursor).Direction 
        = ParameterDirection.Output;
    
    connection.Open();
    cmd.ExecuteNonQuery();
    OracleDataAdapter da = new OracleDataAdapter(objCmd);
    da.Fill(dataset);  
    

    此时您有一个DataSet,因此您可以使用Enumerable.Select 将其中的每个项目转换为OUT_POMONTOCARLOLOCALDATA。这样做后你可以这样做:

    items.AddRange(dataset.Select(item => new OUT_POMONTOCARLOLOCALDATA { /*Set fields*/ } ));
    

    请参阅this question 了解如何从 Oracle 游标中检索数据

    【讨论】:

    • @SantyEssac - 这有帮助吗?
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 2019-11-06
    • 2018-02-12
    • 2020-06-13
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多