我有一个类型列表
List<Type> list = new List<Type>();
list.Add(typeof(class1))
list.Add(typeof(class2))
包含nhibernate表的类型列表。 class1是一个sql表,作为class2。
现在我想要一个像
这样的查询int num = 0;
foreach (var item in list)
{
num += session.Query<item>().Count();
}
session是ISession类。
问题在于item,'因为它是一个变量但是像类型'
一样使用如何将类型转换为类?
答案 0 :(得分:1)
您需要通过反射创建通用方法:
int num = 0;
MethodInfo genericMethod = session.GetType().GetMethod("Query");
foreach (var item in list)
{
MethodInfo specificMethod = genericMethod.MakeGenericMethod(item);
IQueryable result = (IQueryable)method.Invoke(session, new object[0]);
num += result.Count();
}
首先获取通用MethodInfo
方法的Query
(可能名称不是100%正确,请尝试)。
然后,通过使用MethodInfo
中的当前类型调用MakeGenericMethod
来创建特定类型的item
。
最终可以调用此方法,并将返回的object
转换为预期的结果类型(我假设Query
返回IQueryable
)。