'System.Int16'类型的表达式不能用于返回类型'System.Object'

时间:2014-07-11 08:55:33

标签: c# asp.net-mvc linq entity-framework-5 lambda

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;

我如何纠正这个问题?

2 个答案:

答案 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);