加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 如何将ObjectResult转换为IQueryable?

发布时间:2020-12-16 07:12:10 所属栏目:asp.Net 来源:网络整理
导读:我在asp.net mvc 3.0应用程序中使用实体框架.我正在使用表值函数在我的一个数据库表上进行全文搜索.我已将返回类型设置为Request类型的对象.然后,我将结果提供给表达式构建器,该构建器对用户有权访问的实体列表中的“请求”执行包含操作.这是代码. Listint U
我在asp.net mvc 3.0应用程序中使用实体框架.我正在使用表值函数在我的一个数据库表上进行全文搜索.我已将返回类型设置为Request类型的对象.然后,我将结果提供给表达式构建器,该构建器对用户有权访问的实体列表中的“请求”执行包含操作.这是代码.

List<int> UserEntities = db.UserEntities
                              .Where(x => x.UserID.Equals(usr.ID))
                              .Select(x => x.EntityID).ToList();

var requests = db.SearchRequest(keyword)
    .Where(BuildContainsExpression<Request,int>(x => x.EntityID,UserEntities));

//Expression Builder for Contains SQL functionality
static Expression<Func<TElement,bool>> BuildContainsExpression<TElement,TValue>(
     Expression<Func<TElement,TValue>> valueSelector,IEnumerable<TValue> values)
{
    if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }
    if (null == values) { throw new ArgumentNullException("values"); }
    ParameterExpression p = valueSelector.Parameters.Single();
    // p => valueSelector(p) == values[0] || valueSelector(p) == ...
    if (!values.Any())
    {
        return e => false;
    }
    var equals = values.Select(
            value => (Expression)Expression.Equal(
                                      valueSelector.Body,Expression.Constant(value,typeof(TValue))));
    var body = equals.Aggregate<Expression>(
                   (accumulate,equal) => Expression.Or(accumulate,equal));
    return Expression.Lambda<Func<TElement,bool>>(body,p);
}

第二行不会建立.编译器告诉我,SearchRequest过程正在返回ObjectResult但需要IQueryable.如何将ObjectResult转换为IQueryable?

解决方法

只需使用扩展方法 Queryable.AsQueryable<T>().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读