我在運行此代碼時遇到此異常。 System.Int64
型動態Lambda表達式調用
ParameterExpression不能被用於類型
System.Object
的委託參數,我知道這件事情做的代碼Expression.Lambda<func<object,bool>>
一部分。總的來說,我想通過任何類型的到這個方法,它會調用表達式。
public static IQueryable<T> OrderData<T>(IQueryable<T> data)
{
try
{
Order order = Order.ASC;
var result = Enum.TryParse<Order>(_gridSettings.SortOrder, true, out order);
if (_gridSettings.IsSearch)
{
data = ExpressionSort(order, data, typeof(T).GetProperty(_gridSettings.SortColumn));
}
else
{
data = ExpressionSort(order, data, _defaultColumn);
}
}
catch (Exception ex)
{
log.WriteLog(MethodBase.GetCurrentMethod(), LogLevel.FATAL, ex);
}
return data;
}
private static IQueryable<T> ExpressionSort<T>(Order order, IQueryable<T> data, PropertyInfo property)
{
// Compose the expression tree that represents the parameter to the predicate.
ParameterExpression paramExpression = Expression.Parameter(property.PropertyType, property.Name);
IQueryable<T> queryableData = data.AsQueryable<T>();
switch (order)
{
case Order.ASC:
return ExecuteCall(paramExpression, paramExpression, queryableData, "OrderBy");
case Order.DESC:
return ExecuteCall(paramExpression, paramExpression, queryableData, "OrderByDescending");
}
return data;
}
private static IQueryable<T> ExecuteCall<T>(Expression expression, ParameterExpression paramExpression, IQueryable<T> queryableData, string linqMethod)
{
MethodCallExpression callExpression = Expression.Call(
typeof(Queryable),
linqMethod,
new Type[] { queryableData.ElementType },
queryableData.Expression,
Expression.Lambda<Func<object, bool>>(expression, new ParameterExpression[] { paramExpression }));
// Create an executable query from the expression tree.
return queryableData.Provider.CreateQuery<T>(callExpression);
}
編輯: 我沒有看到這個回答類似的問題
Expression of type 'System.Int32' cannot be used for return type 'System.Object' 我不知道如何將它應用到我的代碼雖然
編輯2: 的主要問題是,這Expression.Lambda<Func<object, bool>>(conversion, new ParameterExpression[] { paramExpression }));
線是給我一個例外。 paramExpression包含一個Int64,但它期望一個對象。我不知道如何從我已經擁有的信息或者如果可能的情況下動態地告訴Func。
目標: 我試圖做這樣的事情data.OrderBy(x=>x.DynamicProperty);
您使用的是T <對象,布爾>和您的參數是一個結構......你可以不投的結構來反對 –
你能後的你是如何使用這樣的一個例子,因爲它代表權現在?沒有這一點,很難評估如何解決它。 –
我貼的方法調用了另外兩種方法。沒有什麼比現在更高,只是因爲它還沒有工作。 'IQueryable data'就是這樣'List data' @EBrown –
imGreg