IQueryable<out T> 其中只有类名是已知的



我有什么:

session.Query<Symptom>().First();

我想做的事:

var className="Symptom"
session.Query<className>().First()

有可能以某种方式做到这一点吗?如果是的话,因为我尝试过Type.GetType等,但没有成功。第二个问题是,我必须通过web请求发送"类型",该查询语法中的"类型"我看起来很好吗?或者,我错过了一些点,我可以以某种方式将类型从前端发送到服务,并从数据库中获得我想要的数据。我使用该查询从Nhibernate获取数据,并且我不想硬编码请求数据附带的所有可能的类型。

编辑:

当我尝试GetType时,我得到:

cannot apply operator '<' to operands of type 'method group' and 'system.type'
泛型参数是编译类型的构造。在您的情况下,您指定一个字符串(runtine实体)作为类型名称,因此需要在运行时通过反射创建一个封闭的泛型方法实例。

下一个代码演示了这一点:

假设我有:

public void Query<T>()
{
    Console.WriteLine("Called Query with type: {0}", typeof(T).Name);
}

现在,为了用某种类型调用它,我需要创建一个具有该类型的方法实例:

//type you need to create generic version with
var type = GetType().Assembly //assumes it is located in current assembly
                    .GetTypes()
                    .Single(t => t.Name == "MyType");
//creating a closed generic method
var method = GetType().GetMethod("Query")
                      .GetGenericMethodDefinition()
                      .MakeGenericMethod(type);
//calling it on this object
method.Invoke(this, null); //will print "Called Query with type: MyType"

这是ideone的完整代码。

相关内容

  • 没有找到相关文章

最新更新