我正在嘗試構建OrderBy表達式問題是,當我將var對象傳遞給TSource時,TSource類型將是對象而不是實際列類型 例如,Actual類型是int,但TSource類型是object 。將var作爲T參數傳遞
Type tblType = tblObj.GetType();
PropertyInfo propinfo;
propinfo = tblType.GetProperty(ColumnName);
if (propinfo == null)
{
return null;
}
var instance = Activator.CreateInstance(propinfo.PropertyType);
result = result.OrderBy(GetOrder(item.ColumnName, tblObj, instance));
和這裏是λ表達式構建器
public Expression<Func<T, TSource>> GetOrder<T,TSource>(string field, T item,TSource source)
{
if (string.IsNullOrEmpty(field))
{
return null;
}
var param = Expression.Parameter(typeof(T), "c");
Expression conversion = Expression.Convert(Expression.Property
(param, field), typeof(TSource));
return Expression.Lambda<Func<T, TSource>>(conversion, param);
}
請注意,沒有'var'對象或'var'類型。 'var'僅僅意味着編譯器推斷出這個類型,所以你在聲明一個變量時不必明確寫下它。 'Activator.CreateInstance'返回'object',所以你的行等於'object instance = Activator.CreateInstance(propinfo.PropertyType);'。 – sloth