static IQueryBuilder <TRecord> AddInExpression <TRecord>(ArraySqlOperand operand, IQueryBuilder <TRecord> queryBuilder, MethodCallExpression call) where TRecord : class { var property = GetProperty(call.Arguments[0]); var value = (IEnumerable)GetValueFromExpression(call.Arguments[1], property.PropertyType); return(queryBuilder.Where(property.Name, operand, value)); }
/// <summary> /// Adds an array based where clause expression to the query. /// </summary> /// <typeparam name="TRecord">The record type of the query builder</typeparam> /// <param name="queryBuilder">The query builder</param> /// <param name="fieldName">The name of one of the columns in the query. The where condition will be evaluated against the value of this column.</param> /// <param name="operand">The SQL operator to be used in the where clause</param> /// <param name="values">The values to compare against the column values. Each value will be added to the query as a separate parameter.</param> /// <returns>The query builder that can be used to further modify the query, or execute the query</returns> public static IQueryBuilder <TRecord> Where <TRecord>(this IQueryBuilder <TRecord> queryBuilder, string fieldName, ArraySqlOperand operand, IEnumerable values) where TRecord : class { var stringValues = values.OfType <object>().Select(v => v.ToString()).ToArray(); var parameters = stringValues.Select((v, i) => new Parameter($"{fieldName}{i}")).ToArray(); return(queryBuilder.WhereParameterised(fieldName, operand, parameters) .ParameterValues(stringValues)); }
/// <summary> /// Adds an array based where clause expression to the query. /// </summary> /// <typeparam name="TRecord">The record type of the query builder</typeparam> /// <param name="queryBuilder">The query builder</param> /// <param name="fieldName">The name of one of the columns in the query. The where condition will be evaluated against the value of this column.</param> /// <param name="operand">The SQL operator to be used in the where clause</param> /// <param name="values">The values to compare against the column values. Each value will be added to the query as a separate parameter.</param> /// <returns>The query builder that can be used to further modify the query, or execute the query</returns> [Pure] public static IQueryBuilder <TRecord> Where <TRecord>(this IQueryBuilder <TRecord> queryBuilder, string fieldName, ArraySqlOperand operand, IEnumerable values) where TRecord : class { var valuesList = values.OfType <object>().ToList(); ListExtender.ExtendListRepeatingLastValue(valuesList); var parameters = valuesList.Select((v, i) => new Parameter($"{fieldName}{i + 1}")).ToArray(); return(queryBuilder.WhereParameterized(fieldName, operand, parameters).ParameterValues(valuesList)); }
public ArrayWhereParameter(string fieldName, ArraySqlOperand operand, IReadOnlyList <Parameter> parameterNames) { this.parameterNames = parameterNames; FieldName = fieldName; Operand = operand; }
public IArrayParametersQueryBuilder <TRecord> WhereParameterised(string fieldName, ArraySqlOperand operand, IEnumerable <Parameter> parameterNames) { var parameterNamesList = parameterNames.Select(p => new UniqueParameter(uniqueParameterNameGenerator, p)).ToList(); if (!parameterNamesList.Any()) { return(new ArrayParametersQueryBuilder <TRecord>(AddAlwaysFalseWhere(), parameterNamesList)); } selectBuilder.AddWhere(new ArrayWhereParameter(fieldName, operand, parameterNamesList)); IQueryBuilder <TRecord> builder = this; return(new ArrayParametersQueryBuilder <TRecord>(parameterNamesList.Aggregate(builder, (b, p) => b.Parameter(p)), parameterNamesList)); }
public IArrayParametersQueryBuilder <TRecord> WhereParameterised(string fieldName, ArraySqlOperand operand, IEnumerable <Parameter> parameterNames) { return(Builder.WhereParameterised(fieldName, operand, parameterNames)); }
public ArrayWhereClause(IWhereFieldReference whereFieldReference, ArraySqlOperand operand, IEnumerable <string> parameterNames) { this.whereFieldReference = whereFieldReference; this.operand = operand; this.parameterNames = parameterNames; }
public IArrayParametersDeleteQueryBuilder <TRecord> WhereParameterised(string fieldName, ArraySqlOperand operand, IEnumerable <Parameter> parameterNames) { var parameterNamesList = parameterNames.Select(p => new UniqueParameter(uniqueParameterNameGenerator, p)).ToList(); if (!parameterNamesList.Any()) { return(new ArrayParametersDeleteQueryBuilder <TRecord>(AddWhereClause(AlwaysFalseWhereClause()), parameterNamesList)); } return(new ArrayParametersDeleteQueryBuilder <TRecord>( AddWhereClause(new ArrayWhereClause(new WhereFieldReference(fieldName), operand, parameterNamesList.Select(p => p.ParameterName).ToList())), parameterNamesList)); }