コード例 #1
0
        private IElement AddBase(object content)
        {
            var result = base.Add(content);

            if (content == null
#if DBDATA
                || content == DBNull.Value
#endif
                )
            {
                Xml.SetAttribute("is_null", "1");
                Xml.IsEmpty = true;
            }
            else
            {
                Xml.RemoveAttribute("is_null");

                if (content is IRange range)
                {
                    Xml.SetAttribute("condition", "between");

                    if (content is Range <DateOffset> dateRange)
                    {
                        Xml.SetAttribute(ParameterSubstitution.DateRangeAttribute
                                         , ParameterSubstitution.SerializeDateRange(dateRange));
                    }
                }
            }

            return(result);
        }
コード例 #2
0
        public void Visit(BetweenOperator op)
        {
            if (!(op.Left is PropertyReference prop))
            {
                throw new NotSupportedException();
            }

            EnterContext(op, () =>
            {
                _writer.WriteStartElement(prop.Name);
                _writer.WriteAttributeString("condition", "between");
                if (op.Min is DateOffsetLiteral minOffset && op.Max is DateOffsetLiteral maxOffset)
                {
                    _writer.WriteAttributeString(ParameterSubstitution.DateRangeAttribute
                                                 , ParameterSubstitution.SerializeDateRange(minOffset.Offset, maxOffset.Offset));
                }
                op.Min.Visit(op.Min is DateTimeLiteral ? (IExpressionVisitor)this : _sqlVisitor);
                _writer.WriteString(" and ");
                op.Max.Visit(op.Max is DateTimeLiteral ? (IExpressionVisitor)this : _sqlVisitor);
                _writer.WriteEndElement();
            });