4

我在一個asp.net mvc 3.0應用程序中使用實體框架。我正在使用一個表值函數在我的一個數據庫表上進行全文搜索。我已將返回類型設置爲Request類型的對象。然後,將結果提供給表達式構建器,該構建器從用戶有權訪問的實體列表中對請求執行包含操作。這是代碼。如何將ObjectResult <T>轉換爲IQueryable <T>?

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?

+0

難道你不能只調用'AsIQueryable()'? – Jan

+0

這正是我所期待的。我很困惑,因爲我正在尋找一個.ToQueryable。我甚至沒有想到AsQueryable。如果你把它寫成答案,我會接受它。 –

回答

1

添加行

using System.Linq 

和擴展方法將可用。

相關問題