/// <summary> /// Initializes a new instance of <see cref="ArangoQueryProvider" /> using a custom <see cref="IQueryParser" />. /// </summary> public ArangoQueryProvider(Type queryableType, IQueryParser queryParser, IQueryExecutor executor, IArangoLinq db) : base(LinqUtility.CheckNotNull("queryParser", queryParser), LinqUtility.CheckNotNull("executor", executor)) { LinqUtility.CheckNotNull("queryableType", queryableType); CheckQueryableType(queryableType); QueryableType = queryableType; this.db = db; }
//public static Expression WrapIntoNamedExpression(string memberName, Expression argumentExpression) //{ // var expressionAsNamedExpression = argumentExpression as NamedExpression; // if (expressionAsNamedExpression != null && expressionAsNamedExpression.Name == memberName) // return expressionAsNamedExpression; // return CreateFromMemberName(memberName, argumentExpression); //} public static Expression WrapIntoNamedExpression(IArangoLinq db, MemberInfo memberInfo, Expression argumentExpression) { var memberName = LinqUtility.ResolveMemberNameRaw(db, memberInfo); var expressionAsNamedExpression = argumentExpression as NamedExpression; if (expressionAsNamedExpression != null && expressionAsNamedExpression.Name == memberName) { return(expressionAsNamedExpression); } var namedExpression = CreateFromMemberName(memberName, argumentExpression); return(namedExpression); }
public static Expression CreateNewExpressionWithNamedArguments(IArangoLinq db, NewExpression expression, IEnumerable <Expression> processedArguments) { //var newArguments = processedArguments.Select((e, i) => WrapIntoNamedExpression(GetMemberName(expression.Members, i), e)).ToArray(); var newArguments = processedArguments .Select((e, i) => WrapIntoNamedExpression(db, expression.Members[i], e)).ToArray(); if (!newArguments.SequenceEqual(expression.Arguments)) { // ReSharper disable ConditionIsAlwaysTrueOrFalse - ReSharper is wrong, expression.Members can be null // ReSharper disable HeuristicUnreachableCode if (expression.Members != null) { return(New(expression.Constructor, newArguments, expression.Members)); } return(New(expression.Constructor, newArguments)); // ReSharper restore HeuristicUnreachableCode // ReSharper restore ConditionIsAlwaysTrueOrFalse } return(expression); }
public AqlParser(IArangoLinq db) { this.db = db; }
public static Expression CreateNewExpressionWithNamedArguments(IArangoLinq db, NewExpression expression) { LinqUtility.CheckNotNull("expression", expression); return(CreateNewExpressionWithNamedArguments(db, expression, expression.Arguments)); }
public ArangoQueryExecuter(IArangoLinq db) { this.db = db; }
public static string ResolveMemberName(IArangoLinq db, MemberInfo memberInfo) { return(AddBacktickToName(ResolveMemberNameRaw(db, memberInfo))); }
public static string ResolveMemberNameRaw(IArangoLinq db, MemberInfo memberInfo) { return(ResolvePropertyNameRaw(db.ResolvePropertyName(memberInfo.DeclaringType, memberInfo.Name))); }
public static string ResolveCollectionName(IArangoLinq db, Type itemType) { var collectionName = db.ResolveCollectionName(itemType); return(AddBacktickToName(collectionName)); }
public ArangoQueryable(IQueryProvider provider, Expression expression, IArangoLinq db) : base(provider, expression) { this.db = db; }
public ArangoQueryable(IQueryParser queryParser, IQueryExecutor executor, IArangoLinq db) : base(new ArangoQueryProvider(typeof(ArangoQueryable <>), queryParser, executor, db)) { this.db = db; }