/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected override void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { // assemble the properties var buffer = new StringBuilder(); foreach (var value in values) buffer.AppendFormat("@{0},", commandContext.Command.AddParameter(value)); // append the query commandContext.QueryBuilder.AppendWhere(" [{0}].[id] IN ( SELECT [{1}].[id] FROM [{1}] WHERE [{1}].[name] = '{2}' AND [{1}].[value] IN ({3}) )", commandContext.QueryBuilder.RootTableName, pair.Table.Name, PropertyName, buffer.Trim()); }
/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected override void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { // add the table to the query commandContext.QueryBuilder.AddTable(context, pair.Table, commandContext.Command); // check for single or multiple values if (values.Count == 1) commandContext.QueryBuilder.AppendWhere(" [{0}].[{1}] = @{2}", pair.Table.Name, pair.Column.ColumnName, commandContext.Command.AddParameter(values[0])); else { // start the clause var buffer = new StringBuilder(); buffer.AppendFormat("[{0}].[{1}] IN (", pair.Table.Name, pair.Column.ColumnName); // loop through all the values foreach (var value in values) buffer.AppendFormat("@{0},", commandContext.Command.AddParameter(value)); // finish the clause commandContext.QueryBuilder.AppendWhere("{0})", buffer.Trim()); } }
/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected virtual void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { throw new NotSupportedException(string.Format("Columns of type '{0}' do not support where mapping", GetType().Name)); }