2013-12-20 87 views
0

这是我的自定义类的示例。将自定义类对象转换为对象[]

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

} 

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

我正在寻找一种方式,可能与linq,将一个类型的应用程序对象变成一个对象[],可以传递到ExecuteNoneQuery看起来像这样。

Database.ExecuteNonQuery Method (String, Object[]) 

这是想什么,我能够做一个例子,但应用程序的转换将需要发生之前,这将工作。

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

回答

4

目前还不清楚是否要Application对象的对象本身数组中:

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

或者,如果你想性能分成数组:

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

第二种方法是最好的方法。将属性拆分成一个数组,但不需要手动完成。 – TimidObserver

1
.ExecuteNonQuery(somsesproc, new Object[] {application}); 
+0

这是行不通的。 新对象需要看起来像〜> 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个。 – TimidObserver

2

您可以使用反射去除所有属性值到任意对象的数组:

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));