类型为'System.Int16'的表达式不能用作返回类型为'System.Object'的返回值。

3
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 '是 Users 表中的列且为 Varchar 类型时,没有问题。但如果它是 Int 类型,则会出现错误。错误信息为“无法将类型为'System.Int16'的表达式用于返回类型'System.Object'”

我该如何解决这个问题?

2个回答

1
这里的问题在于 <Tprop> 不是类型为 Int16,而您传递的字符串是类型为 Int16 的列名。
您可以在调用函数 SelectAdmin<TProp> 时简单地指定 <Tprop>
例如:
`SelectAdmin<int>(.......your parameters here);`

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

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

1
偶然情况下,您可能没有为对象(sSortExpression)分配一个值,因为您说它是一个列,也许您将项目对象集合分配为整数,所以出现了错误。

@snow sSortExpression是一个列名的字符串。如果该列是字符串类型,则可以正常工作。但当它是整数类型时,会出现错误。可能的解决方案是什么? - NoMan
@NoMan 但是 users 是一个对象,对吧?也许它有些联系...在 objCouponUow 中查找并检查是否有错误。 - Imants Volkovs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接