C# - 动态执行和确定 Class 调用
C# - Executing and Determining Class Calls Dynamically
我正在尝试创建一个应用程序,它将动态生成内联 SQL 查询语句并传回各种对象。我创建的每个对象 class 都有一个 IRowMapper< ObjectName > GetMapping 方法。
我执行 SQL 并使用以下命令生成对象结果列表,对于我的示例,我将使用一个 Person 对象:
result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList());
不过,我会有几个不同的对象 return 类型,而不仅仅是 Person。我想知道是否可以从字符串中动态获取 class 并调用 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
是一个静态方法,我们别无选择,只能使用反射在运行时解决它:
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);
}
我正在尝试创建一个应用程序,它将动态生成内联 SQL 查询语句并传回各种对象。我创建的每个对象 class 都有一个 IRowMapper< ObjectName > GetMapping 方法。
我执行 SQL 并使用以下命令生成对象结果列表,对于我的示例,我将使用一个 Person 对象:
result.List = new List<Object>(db.ExecuteSqlStringAccessor<Person>(sql, Person.GetMapping()).ToList());
不过,我会有几个不同的对象 return 类型,而不仅仅是 Person。我想知道是否可以从字符串中动态获取 class 并调用 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
是一个静态方法,我们别无选择,只能使用反射在运行时解决它:
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);
}