【问题标题】:Expression of type 'System.Int16' cannot be used for return type 'System.Object'“System.Int16”类型的表达式不能用于返回类型“System.Object”
【发布时间】:2014-07-11 08:55:33
【问题描述】:
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.Object”

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    这里的问题是&lt;Tprop&gt; 不是Int16 类型,而您传递的字符串是Int16 类型的列名

    您可以在调用函数SelectAdmin&lt;TProp&gt; 的任何位置简单地指定&lt;Tprop&gt;

    例如:

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

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

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

    【讨论】:

      【解决方案2】:

      有可能你没有在那里分配一个对象(sSortExpression),因为你说它是一个列,也许你将项目对象集合分配为 int,所以出错了。

      【讨论】:

      • @wolks sSortExpression 是一个字符串,它是一个列名。如果该列是字符串类型.. 完美运行。但是当它是 Int 类型时。发生错误。有什么解决办法?
      • @NoMan 但用户是一个对象,对吧?也许它有点联系......在objCouponUow,查看它,检查是否有错误。
      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      相关资源
      最近更新 更多