[英]Using method parameter as generic type argument
我有一個保存搜索參數的類(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)?
似乎您已經具有列的數據類型,並且想出如何將其傳遞給Generic方法
以下是示例
首先修改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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.