2015-01-29 1 views
1

동적으로 인라인 SQL 쿼리 문을 생성하고 다양한 개체를 전달하는 응용 프로그램을 만들려고합니다. 내가 만든 각 개체 클래스에는 IRowMapper < ObjectName> GetMapping 메서드가 있습니다. 나는뿐만 아니라, 여러 가지 오브젝트 반환 형식이있을 것이다, 그러나동적으로 클래스 호출 실행 및 결정

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList()); 

:

나는 SQL을 실행하고 다음 명령을 사용하여 객체의 결과 목록을 생성, 내 예를 들어 나는 Person 객체를 사용합니다 사람. 문자열에서 클래스를 동적으로 가져 와서 ExecuteSQLStringAccessor를 호출 할 수 있는지 궁금합니다. 예를 들어, 다음과 같은 내용이 있습니다.

Type type = Type.GetType("MyClass", true); 

result.List = new List<Object>(db.ExecuteSqlStringAccessor<type>(SSUDBHelper.OpenQueryRequest(sql, assoc), type.GetMapping()).ToList()); 

도움을 주시면 감사하겠습니다.

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList()); 

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Company>(sql, Company.GetMapping()).ToList()); 

result.List = new List<Object>(db.ExecuteSqlStringAccessor<Invoice>(sql, Invoice.GetMapping()).ToList()); 

일반 :

업데이트

나는이 할 수 있습니까? GetMapping 정적 메서드이기 때문에

+0

당신은 모든 모델을 구현하는 기본 클래스를 사용하여 기본 클래스를 만들 수 있습니다 (또는 인터페이스)에는 GetMapping 메서드가 있습니다. 또는 형식을 사용하여 리플렉션을 통해 메서드를 호출 할 수 있습니다. 마지막으로 동적을 사용하고 거기에서 호출 할 수 있습니다. – Measuring

+1

'Person','Company' 및'Invoice'는'GetMapping' 멤버를 지정하는 공용 인터페이스를 공유합니까? –

+1

또한 db.ExecuteSqlStringAccessor (sql, Invoice.GetMapping())을 사용하여 캐스트 할 수 있습니다. 이제 수행중인 작업 대신 () .ToList()를 캐스트하십시오. –

답변

1

, 우리는 런타임에 해결 한 리플렉션을 사용할 수 밖에 없다 :

IEnumerable<T> GetAsListOf<T>(string sql, YourDBType db) { 
    IRowMapper<T> mapper = (IRowMapper<T>)typeof(T).GetMethod("GetMapping").Invoke(null, null); 
    return db.ExecuteSqlStringAccessor<T>(sql, mapper); 
} 
+0

나는 전반적인 생각에 대해 아직 상당히 새롭다. 나는 이걸'GetAsListOf (sql, db);와 같이 호출해야 하는가? 그것은 유형 또는 네임 스페이스 '유형'을 찾을 수 없다고 말합니다. – ThreadedLemon

+0

@ThreadedLemon 당신은 타입 인자'type'을 문자 그대로 사용하지 않아도됩니다. 당신은'GetAsListOf (sql, db)'을 할 수 있으며'IEnumerable '을 줄 것입니다. –

+0

아, 그래 ...하지만 런타임까지 'Person'형식이 될지 모르겠다면 type type = Type.GetType (dataType, true);'dataType이 a "사람", "송장"또는 "회사"문자열 – ThreadedLemon