使用方法参数作为泛型类型参数
本文关键字:泛型类型参数 参数 使用方法 | 更新日期: 2023-09-27 18:34:39
我有一个保存搜索参数的类(SearchParameters(,然后我使用一个名为Querybuilder的泛型类基于这些参数创建一个linq查询。这将返回结果,并且一切正常。
结果显示在 GridView 中,我目前正在为 gridivew 实现自定义排序,我将要搜索的字段添加到 SearchParameters 对象(使用流畅的界面(
SearchParameters=SearchParameters.SortResultsBy(e.SortExpression,e.NewSortOrder.ToString());
我需要将列的数据类型用作我的 AddOrderByClause(( 方法的通用参数:
public void AddOrderByClause<D>(string field, Type sourceDateType)
{
var orderExpression = Expression.Lambda<Func<T, D>>(Expression.Property(resultExpression, field), resultExpression);
rootExpression = Expression.Call(
typeof(Queryable),
"OrderBy",
new Type[] { typeof(T), typeof(D) },
rootExpression,
orderExpression);
}
我可以轻松找到列的数据类型,但是如何将其传递给AddOrderByClause()
(通用参数 D(?
public void AddOrderByClause<D,E>(string field, E sourceDataType)
{
.....
}
使用反射获取方法AddOrderByClause,然后使用MakeGenericMethod获取泛型。 这是一般的想法(有点模糊,因为我不知道你所有的类型都叫什么(。
Type MyTypeParameter; // TODO set this to type parameter D
Type type; // TODO set this to the type that contains the method "AddOrderByClause"
MethodInfo method = type.GetMethod("AddOrderByClause");
MethodInfo genericMethod = method.MakeGenericMethod(typeof(MyTypeParameter));
genericMethod.Invoke(MyClassInstance, FieldParam, SourceDataParam);
但是我如何将其传递给 AddOrderByClause(((通用参数 D(?
似乎您已经拥有列的数据类型,并且您正在弄清楚如何将其传递给泛型方法
下面是示例
首先修改 AddOrderByClause 以接受 T(稍后在函数中使用(
public void AddOrderByClause<D,T>(String field)
{
....
}
然后调用 AddOrderByClause 像
var data = SearchParameter;// Use actual data if SearchParameter is not correct
AddOrderByClause<D,date.GetType()>(fieldData);// assuming fieldData is something different
var data = SearchParameter;// Use actual data if SearchParameter is not currect