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