예제 #1
0
        public static IEnumerable <QueryFilter> GetFilters(this IFilterable filterable)
        {
            var typeInfo          = filterable.GetType();
            var matchProperties   = typeInfo.GetProperties(new MatchFilterAttribute());
            var dateProperties    = typeInfo.GetProperties(new DateRangeFilterAttribute());
            var numericProperties = typeInfo.GetProperties(new NumericRangeFilterAttribute());

            return(MakeFilterFromProperties(filterable, matchProperties, dateProperties, numericProperties));
        }
예제 #2
0
        private bool GetSimpleRuminantProperty(IFilterable individual, out ConstantExpression propertyValue)
        {
            propertyValue = null;
            if (!propertyInfo.DeclaringType.IsAssignableFrom(individual.GetType()))
            {
                return(false);
            }

            if (propertyInfo != null && (propertyInfo.DeclaringType == typeof(Ruminant) || propertyInfo.DeclaringType.IsSubclassOf(typeof(Ruminant))))
            {
                switch (propertyInfo.Name)
                {
                case "Age":
                    propertyValue = Expression.Constant((individual as Ruminant).Age, propertyInfo.PropertyType);
                    break;

                case "Weight":
                    propertyValue = Expression.Constant((individual as Ruminant).Weight, propertyInfo.PropertyType);
                    break;

                case "Sex":
                    propertyValue = Expression.Constant((individual as Ruminant).Sex, propertyInfo.PropertyType);
                    break;

                case "IsWeaner":
                    propertyValue = Expression.Constant((individual as Ruminant).IsWeaner, propertyInfo.PropertyType);
                    break;

                case "IsSire":
                    propertyValue = Expression.Constant((individual as RuminantMale).IsSire, propertyInfo.PropertyType);
                    break;

                case "IsAbleToBreed":
                    propertyValue = Expression.Constant((individual as Ruminant).IsAbleToBreed, propertyInfo.PropertyType);
                    break;

                case "IsHeifer":
                    propertyValue = Expression.Constant((individual as RuminantFemale).IsHeifer, propertyInfo.PropertyType);
                    break;

                case "IsLactating":
                    propertyValue = Expression.Constant((individual as RuminantFemale).IsLactating, propertyInfo.PropertyType);
                    break;

                case "IsPreBreeder":
                    propertyValue = Expression.Constant((individual as RuminantFemale).IsPreBreeder, propertyInfo.PropertyType);
                    break;

                case "IsPregnant":
                    propertyValue = Expression.Constant((individual as RuminantFemale).IsPregnant, propertyInfo.PropertyType);
                    break;

                case "IsCalf":
                    propertyValue = Expression.Constant((individual as Ruminant).IsCalf, propertyInfo.PropertyType);
                    break;

                case "Breed":
                    propertyValue = Expression.Constant((individual as Ruminant).Breed, propertyInfo.PropertyType);
                    break;

                case "Class":
                    propertyValue = Expression.Constant((individual as Ruminant).Class, propertyInfo.PropertyType);
                    break;

                case "EnergyBalance":
                    propertyValue = Expression.Constant((individual as Ruminant).EnergyBalance, propertyInfo.PropertyType);
                    break;

                case "HerdName":
                    propertyValue = Expression.Constant((individual as Ruminant).HerdName, propertyInfo.PropertyType);
                    break;

                case "HighWeight":
                    propertyValue = Expression.Constant((individual as Ruminant).HighWeight, propertyInfo.PropertyType);
                    break;

                case "Location":
                    propertyValue = Expression.Constant((individual as Ruminant).Location, propertyInfo.PropertyType);
                    break;

                case "ProportionOfHighWeight":
                    propertyValue = Expression.Constant((individual as Ruminant).ProportionOfHighWeight, propertyInfo.PropertyType);
                    break;

                case "ProportionOfNormalisedWeight":
                    propertyValue = Expression.Constant((individual as Ruminant).ProportionOfNormalisedWeight, propertyInfo.PropertyType);
                    break;

                case "AdultEquivalent":
                    propertyValue = Expression.Constant((individual as Ruminant).AdultEquivalent, propertyInfo.PropertyType);
                    break;

                case "HealthScore":
                    propertyValue = Expression.Constant((individual as Ruminant).HealthScore, propertyInfo.PropertyType);
                    break;

                case "ProportionOfSRW":
                    propertyValue = Expression.Constant((individual as Ruminant).ProportionOfSRW, propertyInfo.PropertyType);
                    break;

                case "ReadyForSale":
                    propertyValue = Expression.Constant((individual as Ruminant).ReadyForSale, propertyInfo.PropertyType);
                    break;

                case "RelativeCondition":
                    propertyValue = Expression.Constant((individual as Ruminant).RelativeCondition, propertyInfo.PropertyType);
                    break;

                case "RelativeSize":
                    propertyValue = Expression.Constant((individual as Ruminant).RelativeSize, propertyInfo.PropertyType);
                    break;

                case "ReplacementBreeder":
                    propertyValue = Expression.Constant((individual as Ruminant).ReplacementBreeder, propertyInfo.PropertyType);
                    break;

                case "SaleFlag":
                    propertyValue = Expression.Constant((individual as Ruminant).SaleFlag, propertyInfo.PropertyType);
                    break;

                case "Weaned":
                    propertyValue = Expression.Constant((individual as Ruminant).Weaned, propertyInfo.PropertyType);
                    break;

                case "WeightGain":
                    propertyValue = Expression.Constant((individual as Ruminant).WeightGain, propertyInfo.PropertyType);
                    break;

                case "Cashmere":
                    propertyValue = Expression.Constant((individual as Ruminant).Cashmere, propertyInfo.PropertyType);
                    break;

                case "Wool":
                    propertyValue = Expression.Constant((individual as Ruminant).Wool, propertyInfo.PropertyType);
                    break;

                case "IsWildBreeder":
                    propertyValue = Expression.Constant((individual as RuminantMale).IsWildBreeder, propertyInfo.PropertyType);
                    break;

                case "DaysLactating":
                    propertyValue = Expression.Constant((individual as RuminantFemale).DaysLactating, propertyInfo.PropertyType);
                    break;

                case "MonthsSinceLastBirth":
                    propertyValue = Expression.Constant((individual as RuminantFemale).MonthsSinceLastBirth, propertyInfo.PropertyType);
                    break;

                case "NumberOfBirths":
                    propertyValue = Expression.Constant((individual as RuminantFemale).NumberOfBirths, propertyInfo.PropertyType);
                    break;

                case "NumberOfBreedingMonths":
                    propertyValue = Expression.Constant((individual as RuminantFemale).NumberOfBreedingMonths, propertyInfo.PropertyType);
                    break;

                case "NumberOfConceptions":
                    propertyValue = Expression.Constant((individual as RuminantFemale).NumberOfConceptions, propertyInfo.PropertyType);
                    break;

                case "NumberOfOffspring":
                    propertyValue = Expression.Constant((individual as RuminantFemale).NumberOfOffspring, propertyInfo.PropertyType);
                    break;

                case "NumberOfWeaned":
                    propertyValue = Expression.Constant((individual as RuminantFemale).NumberOfWeaned, propertyInfo.PropertyType);
                    break;

                case "SuccessfulPregnancy":
                    propertyValue = Expression.Constant((individual as RuminantFemale).SuccessfulPregnancy, propertyInfo.PropertyType);
                    break;

                case "IsBreeder":
                    propertyValue = Expression.Constant((individual as RuminantFemale).IsBreeder, propertyInfo.PropertyType);
                    break;
                }
            }
            else if (propertyInfo != null && (propertyInfo.DeclaringType == typeof(LabourType)))
            {
                switch (propertyInfo.Name)
                {
                case "Age":
                    propertyValue = Expression.Constant((individual as LabourType).Age, propertyInfo.PropertyType);
                    break;

                case "Sex":
                    propertyValue = Expression.Constant((individual as LabourType).Sex, propertyInfo.PropertyType);
                    break;

                case "Hired":
                    propertyValue = Expression.Constant((individual as LabourType).Hired, propertyInfo.PropertyType);
                    break;

                case "Name":
                    propertyValue = Expression.Constant((individual as LabourType).Name, propertyInfo.PropertyType);
                    break;
                }
            }
            return(propertyValue != null);
        }