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); }
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(); });