public StringOrIntComparer(
     IComparer <string> stringComparer,
     IEqualityComparer <string> stringEqualityComparer,
     NullComparison nullComparison = NullComparison.NullsFirst)
     : base(nullComparison)
 {
     this.stringComparer         = stringComparer;
     this.stringEqualityComparer = stringEqualityComparer;
 }
        public FranchiseEntryTitleComparer(
            CultureInfo culture,
            NullComparison nullComparison = NullComparison.NullsFirst)
            : base(nullComparison)
        {
            this.titleComparer = new TitleComparer(culture);

            this.baseComparer = ComparerBuilder.For <FranchiseEntry>()
                                .OrderBy(this.GetTitleName)
                                .ThenBy(entry => entry.GetStartYear())
                                .ThenBy(entry => entry.GetEndYear());
        }
예제 #3
0
        public ListItemTitleComparer(
            CultureInfo culture,
            IComparer <ListItem> otherComparer,
            Func <ListItem, string> getTitle,
            Func <Franchise, string> getFranchiseTitle,
            NullComparison nullComparison = NullComparison.NullsFirst)
            : base(nullComparison)
        {
            this.getTitle          = getTitle;
            this.getFranchiseTitle = getFranchiseTitle;

            this.titleComparer         = new TitleComparer(culture);
            this.otherComparer         = otherComparer;
            this.titleAndOtherComparer = ComparerBuilder.For <ListItem>()
                                         .OrderBy(this.getTitle, this.titleComparer)
                                         .ThenBy(otherComparer);
        }
예제 #4
0
 protected NullableComparerBase(NullComparison nullComparison) =>
 this.NullComparison = nullComparison;
예제 #5
0
        protected override Expression VisitBinary(BinaryExpression node)
        {
            switch (node.NodeType)
            {
            case ExpressionType.NotEqual:
            case ExpressionType.Equal:
                var @null = new NullComparison().Extract(node);

                if (@null.Null)
                {
                    var column = _columns.Single(@null.Path);

                    Builder.Append(column.Column()).Append(" IS ");

                    switch (node.NodeType)
                    {
                    case ExpressionType.NotEqual: Builder.Append("NOT NULL"); break;

                    case ExpressionType.Equal:    Builder.Append("NULL");     break;
                    }

                    return(node);
                }
                break;
            }

            if (ExpressionType.OrElse == node.NodeType)
            {
                Builder.Append('(');
            }

            Visit(node.Left);

            Builder.Append(' ');

            /*
             * TODO: We should really be checking for valid comparisons
             *
             * There are some constraints for key fields, IIRC they can only use =
             */
            switch (node.NodeType)
            {
            case ExpressionType.LessThanOrEqual:    Builder.Append("<=");  break;

            case ExpressionType.LessThan:           Builder.Append("<");   break;

            case ExpressionType.GreaterThanOrEqual: Builder.Append(">=");  break;

            case ExpressionType.GreaterThan:        Builder.Append(">");   break;

            case ExpressionType.Equal:              Builder.Append("=");   break;

            case ExpressionType.NotEqual:           Builder.Append("!=");  break;

            case ExpressionType.AndAlso:            Builder.Append("AND"); break;

            case ExpressionType.OrElse:             Builder.Append("OR");  break;

            default:
                throw new ArgumentException("NodeType: " + node.NodeType);
            }

            Builder.Append(' ');

            Visit(node.Right);

            if (ExpressionType.OrElse == node.NodeType)
            {
                Builder.Append(')');
            }

            return(node);
        }