2013-12-20 5 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을 사용하여 Application 유형의 객체를 다음과 같이 보이는 ExecuteNoneQuery에 전달할 수있는 Object []로 변환 할 수있는 방법을 찾고 있습니다.

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.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}입니다. 그러나 실제 프로젝트에서 오브젝트는 주어진 예제에서 3 개가 아닌 14 개의 매개 변수를 갖기 때문에보다 효율적이고 짧은 방법을 찾고있었습니다. – TimidObserver

2
:

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

또는 당신은 배열에 속성을 분할을 원하는 경우

리플렉션을 사용하여 모든 속성 값을 제거 할 수 있습니다

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