2013-12-20 90 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));