System.Int16'不能用于返回类型'System.Object'

本文关键字:System Object 返回类型 不能 Int16 用于 | 更新日期: 2023-09-27 18:12:31

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'这是一个列在用户表是Varchar类型,没有问题,但如果它的Int类型..发生错误System类型的表达式。Int16'不能用于返回类型'System '。对象'

如何纠正这个问题?

System.Int16'不能用于返回类型'System.Object'

这里的问题是<Tprop>不是Int16类型的字符串,您正在传递的是Int16类型的列名

您可以在调用SelectAdmin<TProp>函数时简单地指定<Tprop>

例如:

`SelectAdmin<int>(.......your parameters here);`

如果sSortExpression的类型是int16。如果是DateTime类型,可以这样调用

 SelectAdmin<DateTime>(.......your parameters here);

碰巧你没有分配一个对象(sSortExpression),因为你说它是一个列,也许你分配项目对象集合为int,所以得到错误