internal CommandCondition(TCommand command, ColumnPredicateCollection predicates) { Argument.Assert.IsNotNull(command, nameof(command)); this.command = command; this.predicates = predicates; }
private static void AddColumnPredicates(ColumnPredicateCollection predicateCollection, StringBuilder sqlBuilder, SqlCommand command) { for (int i = 0; i < predicateCollection.Count; i++) { ColumnPredicate predicate = predicateCollection[i]; if (predicate.OrToPreviousGroup) { sqlBuilder.Append(" OR "); } else if (i >= 1) { sqlBuilder.Append(" AND "); } if (predicate.IsGroup) { sqlBuilder.Append("("); for (ColumnPredicate current = predicate; current != null; current = current.NextInGroup) { IQueryableColumn column = current.Column; string columText = string.Format("[{0}].[{1}].[{2}]", column.Table.Owner, column.Table.Name, column.Name); if (column.ColumnFormat != null) { columText = string.Format(column.ColumnFormat, columText); } if (current.Value == DBNull.Value || current.Value == null) { sqlBuilder.Append(columText + " " + GetComparisonOperator(current.Comparison, current.Value) + " NULL"); } else if (current.Comparison == Comparison.Between) { string param1Name = predicateCollection.GetUniqueName(current); string param2Name = predicateCollection.GetUniqueName(current); sqlBuilder.AppendFormat("{0} {1} @{2} AND @{3}", columText, GetComparisonOperator(current.Comparison, current.Value), param1Name, param2Name); AddCommandParameter(command, current, param1Name, param2Name); } else { string param1Name = predicateCollection.GetUniqueName(current); sqlBuilder.AppendFormat("{0} {1} @{2}", columText, GetComparisonOperator(current.Comparison, current.Value), param1Name); AddCommandParameter(command, current, param1Name, param1Name); } if (current.NextInGroup == null) { sqlBuilder.Append(")"); } if (current.NextInGroup != null && current.OrNextPredicate) { sqlBuilder.Append(" OR "); } else if (current.NextInGroup != null) { sqlBuilder.Append(" AND "); } } } else { IQueryableColumn column = predicate.Column; string columText = string.Format("[{0}].[{1}].[{2}]", column.Table.Owner, column.Table.Name, column.Name); if (column.ColumnFormat != null) { columText = string.Format(column.ColumnFormat, columText); } if (predicate.Value == DBNull.Value || predicate.Value == null) { sqlBuilder.Append(columText + " " + GetComparisonOperator(predicate.Comparison, predicate.Value) + " NULL"); } else if (predicate.Comparison == Comparison.Between) { string param1Name = predicateCollection.GetUniqueName(predicate); string param2Name = predicateCollection.GetUniqueName(predicate); sqlBuilder.AppendFormat("{0} {1} @{2} AND @{3}", columText, GetComparisonOperator(predicate.Comparison, predicate.Value), param1Name, param2Name); AddCommandParameter(command, predicate, param1Name, param2Name); } else { string param1Name = predicateCollection.GetUniqueName(predicate); sqlBuilder.AppendFormat("{0} {1} @{2}", columText, GetComparisonOperator(predicate.Comparison, predicate.Value), param1Name); AddCommandParameter(command, predicate, param1Name, param1Name); } if (predicate.NextInGroup != null && predicate.OrNextPredicate) { sqlBuilder.Append(" OR "); } else if (predicate.NextInGroup != null) { sqlBuilder.Append(" AND "); } } } }
public QueryCondition(EntitySet <T> host, ColumnPredicateCollection predicates) : base(host, predicates) { }