/// <summary> /// Gets the expression. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="serviceInstance">The service instance.</param> /// <param name="parameterExpression">The parameter expression.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override Expression GetExpression(Type entityType, IService serviceInstance, ParameterExpression parameterExpression, string selection) { DateTime currentDate = RockDateTime.Today; int currentDayOfYear = currentDate.DayOfYear; var values = selection.Split('|'); ComparisonType comparisonType = values[0].ConvertToEnum <ComparisonType>(ComparisonType.EqualTo); int? ageValue = values[1].AsIntegerOrNull(); var rockContext = (RockContext)serviceInstance.Context; var personAgeQuery = new PersonService(rockContext).Queryable(); MemberExpression idExpression = Expression.Property(parameterExpression, "Id"); Expression ageSelect = new Rock.Reporting.DataSelect.Person.AgeSelect().GetExpression(rockContext, idExpression, ""); var personAgeEqualQuery = personAgeQuery.Where( p => (p.BirthDate > SqlFunctions.DateAdd("year", -SqlFunctions.DateDiff("year", p.BirthDate, currentDate), currentDate) ? SqlFunctions.DateDiff("year", p.BirthDate, currentDate) - 1 : SqlFunctions.DateDiff("year", p.BirthDate, currentDate)) == ageValue); BinaryExpression compareEqualExpression = FilterExpressionExtractor.Extract <Rock.Model.Person>(personAgeEqualQuery, parameterExpression, "p") as BinaryExpression; BinaryExpression result = FilterExpressionExtractor.AlterComparisonType(comparisonType, compareEqualExpression, null); return(result); }
/// <summary> /// Gets the expression. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="serviceInstance">The service instance.</param> /// <param name="parameterExpression">The parameter expression.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override Expression GetExpression(Type entityType, IService serviceInstance, ParameterExpression parameterExpression, string selection) { DateTime currentDate = RockDateTime.Today; int currentDayOfYear = currentDate.DayOfYear; var values = selection.Split('|'); ComparisonType comparisonType = values[0].ConvertToEnum <ComparisonType>(ComparisonType.EqualTo); int? ageValue = values[1].AsIntegerOrNull(); var rockContext = (RockContext)serviceInstance.Context; var personAgeQuery = new PersonService(rockContext).Queryable(); MemberExpression idExpression = Expression.Property(parameterExpression, "Id"); Expression ageSelect = new Rock.Reporting.DataSelect.Person.AgeSelect().GetExpression(rockContext, idExpression, ""); if (values.Length >= 3 && comparisonType == ComparisonType.Between) { var numberRangeEditor = new NumberRangeEditor(); numberRangeEditor.DelimitedValues = values[2]; decimal ageValueStart = numberRangeEditor.LowerValue ?? 0; decimal ageValueEnd = numberRangeEditor.UpperValue ?? decimal.MaxValue; var personAgeBetweenQuery = personAgeQuery.Where( p => ((p.BirthDate > SqlFunctions.DateAdd("year", -SqlFunctions.DateDiff("year", p.BirthDate, currentDate), currentDate) ? SqlFunctions.DateDiff("year", p.BirthDate, currentDate) - 1 : SqlFunctions.DateDiff("year", p.BirthDate, currentDate)) >= ageValueStart) && ((p.BirthDate > SqlFunctions.DateAdd("year", -SqlFunctions.DateDiff("year", p.BirthDate, currentDate), currentDate) ? SqlFunctions.DateDiff("year", p.BirthDate, currentDate) - 1 : SqlFunctions.DateDiff("year", p.BirthDate, currentDate)) <= ageValueEnd)); BinaryExpression result = FilterExpressionExtractor.Extract <Rock.Model.Person>(personAgeBetweenQuery, parameterExpression, "p") as BinaryExpression; return(result); } else { var personAgeEqualQuery = personAgeQuery.Where( p => (p.BirthDate > SqlFunctions.DateAdd("year", -SqlFunctions.DateDiff("year", p.BirthDate, currentDate), currentDate) ? SqlFunctions.DateDiff("year", p.BirthDate, currentDate) - 1 : SqlFunctions.DateDiff("year", p.BirthDate, currentDate)) == ageValue); BinaryExpression compareEqualExpression = FilterExpressionExtractor.Extract <Rock.Model.Person>(personAgeEqualQuery, parameterExpression, "p") as BinaryExpression; BinaryExpression result = FilterExpressionExtractor.AlterComparisonType(comparisonType, compareEqualExpression, null); return(result); } }
/// <summary> /// Gets the expression. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="serviceInstance">The service instance.</param> /// <param name="parameterExpression">The parameter expression.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override Expression GetExpression( Type entityType, IService serviceInstance, ParameterExpression parameterExpression, string selection ) { DateTime currentDate = RockDateTime.Today; int currentDayOfYear = currentDate.DayOfYear; var values = selection.Split( '|' ); ComparisonType comparisonType = values[0].ConvertToEnum<ComparisonType>( ComparisonType.EqualTo ); int? ageValue = values[1].AsIntegerOrNull(); var rockContext = (RockContext)serviceInstance.Context; var personAgeQuery = new PersonService( rockContext ).Queryable(); MemberExpression idExpression = Expression.Property( parameterExpression, "Id" ); Expression ageSelect = new Rock.Reporting.DataSelect.Person.AgeSelect().GetExpression( rockContext, idExpression, "" ); var personAgeEqualQuery = personAgeQuery.Where( p => (p.BirthDate > SqlFunctions.DateAdd( "year", -SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ), currentDate ) ? SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) - 1 : SqlFunctions.DateDiff( "year", p.BirthDate, currentDate )) == ageValue ); BinaryExpression compareEqualExpression = FilterExpressionExtractor.Extract<Rock.Model.Person>( personAgeEqualQuery, parameterExpression, "p" ) as BinaryExpression; BinaryExpression result = FilterExpressionExtractor.AlterComparisonType( comparisonType, compareEqualExpression, null ); return result; }
/// <summary> /// Gets the expression. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="serviceInstance">The service instance.</param> /// <param name="parameterExpression">The parameter expression.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override Expression GetExpression( Type entityType, IService serviceInstance, ParameterExpression parameterExpression, string selection ) { DateTime currentDate = RockDateTime.Today; int currentDayOfYear = currentDate.DayOfYear; var values = selection.Split( '|' ); ComparisonType comparisonType = values[0].ConvertToEnum<ComparisonType>( ComparisonType.EqualTo ); int? ageValue = values[1].AsIntegerOrNull(); var rockContext = (RockContext)serviceInstance.Context; var personAgeQuery = new PersonService( rockContext ).Queryable(); MemberExpression idExpression = Expression.Property( parameterExpression, "Id" ); Expression ageSelect = new Rock.Reporting.DataSelect.Person.AgeSelect().GetExpression( rockContext, idExpression, "" ); if ( values.Length >= 3 && comparisonType == ComparisonType.Between ) { var numberRangeEditor = new NumberRangeEditor(); numberRangeEditor.DelimitedValues = values[2]; decimal ageValueStart = numberRangeEditor.LowerValue ?? 0; decimal ageValueEnd = numberRangeEditor.UpperValue ?? decimal.MaxValue; var personAgeBetweenQuery = personAgeQuery.Where( p => ( ( p.BirthDate > SqlFunctions.DateAdd( "year", -SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ), currentDate ) ? SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) - 1 : SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) ) >= ageValueStart ) && ( ( p.BirthDate > SqlFunctions.DateAdd( "year", -SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ), currentDate ) ? SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) - 1 : SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) ) <= ageValueEnd ) ); BinaryExpression result = FilterExpressionExtractor.Extract<Rock.Model.Person>( personAgeBetweenQuery, parameterExpression, "p" ) as BinaryExpression; return result; } else { var personAgeEqualQuery = personAgeQuery.Where( p => ( p.BirthDate > SqlFunctions.DateAdd( "year", -SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ), currentDate ) ? SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) - 1 : SqlFunctions.DateDiff( "year", p.BirthDate, currentDate ) ) == ageValue ); BinaryExpression compareEqualExpression = FilterExpressionExtractor.Extract<Rock.Model.Person>( personAgeEqualQuery, parameterExpression, "p" ) as BinaryExpression; BinaryExpression result = FilterExpressionExtractor.AlterComparisonType( comparisonType, compareEqualExpression, null ); return result; } }