public IQueryable<Users> SelectAdmin<TProp>(string sSortExpression, string sSortOrder ,long[] IAds, int iStart, int iEnd, long iId)
{
var param = Expression.Parameter(typeof(Users));
var propExpression = Expression.Lambda<Func<Users, TProp>>(Expression.Property(param, sSortExpression), param);
if (sSortOrder == "asc")
{
return objCouponUow.Repository<Users>().Entities.Where(x => x.UserGroup == 9 && x.Validate == 0 && x.Deleted == false && IAds.Contains(x.UserParent)).OrderBy(propExpression).Skip(iStart).Take(iEnd - iStart);
}
}
这是我的功能..我收到了错误:
var propExpression = Expression.Lambda<Func<Users, TProp>>(Expression.Property(param, sSortExpression), param);
当'sSortExpression&#39;用户表中的列是Type Varchar,没有问题但是如果它的Int类型..错误发生 类型系统的表达.Int16&#39;不能用于返回类型&#39; System.Object&#39;
我如何纠正这个问题?
答案 0 :(得分:1)
你有可能不给它分配一个对象(sSortExpression),因为你说它是一个列,也许你将项目对象集合指定为int,所以得到了错误。
答案 1 :(得分:1)
此处的问题是<Tprop>
不属于Int16
类型,而您传递的字符串是Int16
您只需在调用函数<Tprop>
的地方指定SelectAdmin<TProp>
即可。
例如:
`SelectAdmin<int>(.......your parameters here);`
如果sSortExpression属于Type int16。
如果它属于DateTime
类型,您可以像这样调用
SelectAdmin<DateTime>(.......your parameters here);