【问题标题】:Converting custom class object into an Object[]将自定义类对象转换为 Object[]
【发布时间】:2014-01-09 12:06:30
【问题描述】:

这是我的自定义类的示例。

public class Application
{
    public string App_Name { get; set; }
    public string App_Number { get; set; }
    public string Sever_Name { get; set; }

}

我正在使用企业库数据块中的 ExecuteNonquery 来调用我的存储过程。

我正在寻找一种方法,可能使用 linq,将 Application 类型的对象转换为 Object[],该对象可以传递给 ExecuteNoneQuery,如下所示。

Database.ExecuteNonQuery Method (String, Object[])

这是我希望能够做的一个示例,但在此之前需要转换应用程序。

internal void Update(Application application)
{
    int returnValue = 0;
    string sql = "somsesproc";
    DatabaseFactory.CreateDatabase("AppsConnectionString").ExecuteNonQuery(somsesproc,    application);
}

【问题讨论】:

    标签: c# linq collections type-conversion enterprise-library


    【解决方案1】:
    .ExecuteNonQuery(somsesproc, new Object[] {application});
    

    【讨论】:

    • 这不起作用。新对象需要看起来像~> object[] values = new object[] { App_name, APP_number, Server_name };但是,使用您的代码,它最终看起来像 Object[] values = new object[] { application }。一种可行的方法是~> Object[] values = new object[] { application.App_name, application.APP_number, application.Server_Name }。但是,我一直在寻找一种更有效/更短的方法来执行此操作,因为在我的实际项目中,该对象将有 14 个参数,而不是我给出的示例中的 3 个。
    【解决方案2】:

    尚不清楚您是否希望 Application 对象本身包含在对象数组中:

    object[] oa = new object[] {application};
    

    或者如果你想把 properties 拆分成一个数组:

    object[] oa = new object[] {application.App_Name, 
                                application.App_Number, 
                                application.Sever_Name};
    

    【讨论】:

    • 第二种方法是最好的说法。将属性拆分为数组,但无需手动操作。
    【解决方案3】:

    您可以使用反射将所有属性值剥离到任意对象的数组中:

    public static object[] StripPropertyValues<T>(T obj)
    {
        return typeof(T).GetProperties(BindingFlags.Public |
            BindingFlags.Instance)
                .Select(prop => prop.GetValue(obj))
                .ToArray();
    }
    

    因此允许你写:

    DatabaseFactory.CreateDatabase("AppsConnectionString")
        .ExecuteNonQuery(somsesproc, StripPropertyValues(application));
    

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多