IQueryable <out t =“”>只知道类名</out>

时间:2015-03-04 16:08:27

标签: c# linq nhibernate linq-query-syntax

我有什么:

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

我想做什么:

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

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

编辑:

当我尝试GetType时,我得到:

cannot apply operator '<' to operands of type 'method group' and 'system.type'

1 个答案:

答案 0 :(得分:3)

通用参数是编译类型构造。在您的情况下,您指定一个字符串(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上的full code