【发布时间】:2015-06-26 07:41:50
【问题描述】:
我正在尝试构建 OrderBy 表达式,问题是当我将 var 对象传递给 TSource 时,TSource 的类型将是对象而不是实际列类型 例如 Actual 类型是 int 而 TSource 类型是 object。
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));
这里是 lambda 表达式生成器
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);。