查询类型列表

时间:2016-06-16 08:38:55

标签: c# generics nhibernate

我有一个类型列表

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,'因为它是一个变量但是像类型'

一样使用

如何将类型转换为类?

1 个答案:

答案 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)。