public TResult Execute <TResult>(Expression expression) { var q = _root.GetQueryable(_queryableExpression); if (_enumerableRootObject == null) { if (expression is MethodCallExpression m) { var args = m.Arguments.ToArray(); var type = _root.GetType(); if (_queryableExpression != null) { type = _queryableExpression.Type; } if (type.IsGenericType) { type = type.GetGenericArguments()[0]; } args[0] = Expression.Call(null, FullDbUtility.GetOfTypeMethod(type), Expression.Constant(q)); expression = m.Update(null, args); } } else { expression = _enumerableRootObject.GetEnumerableExpression(q); } return(ExecuteExpression <TResult>(expression)); }
public IQueryable <TElement> CreateQuery <TElement>(Expression expression) { if (_enumerableRootObject == null && FullDbUtility.IsQueryableExpression(expression)) { _queryableExpression = expression; return(new FullDbQueryObject <TElement>(this, expression)); } else { if (_enumerableRootObject == null) { if (expression is MethodCallExpression m) { var args = m.Arguments.ToArray(); args[0] = Expression.Constant(null, typeof(IQueryable <TElement>)); expression = m.Update(null, args); } } var temp = new FullDbQueryObject <TElement>(this, expression); if (_enumerableRootObject == null) { _enumerableRootObject = temp; } return(temp); } }