示例#1
0
        internal CommandCondition(TCommand command, ColumnPredicateCollection predicates)
        {
            Argument.Assert.IsNotNull(command, nameof(command));

            this.command    = command;
            this.predicates = predicates;
        }
示例#2
0
        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 ");
                    }
                }
            }
        }
示例#3
0
 public QueryCondition(EntitySet <T> host, ColumnPredicateCollection predicates) : base(host, predicates)
 {
 }