public static ICollection <AbstractSearch> AddCustomSearchCriterion <T>(this ICollection <AbstractSearch> searchCriterias, Expression <Func <T, object> > property) { Type propertyType = null; string fullPropertyPath = GetPropertyPath(property, out propertyType); AbstractSearch searchCriteria = CreateSearchCriterion(typeof(T), propertyType, fullPropertyPath); if (searchCriteria != null) { searchCriterias.Add(searchCriteria); } return(searchCriterias); }
private static AbstractSearch CreateSearchCriterion(Type targetType, Type propertyType, string property, string term) { AbstractSearch result = null; if (propertyType.IsCollectionType()) { propertyType = propertyType.GetGenericArguments().First(); } if (propertyType.Equals(typeof(string))) { result = new TextSearch { SearchTerm = term }; } else if (propertyType.Equals(typeof(int)) || propertyType.Equals(typeof(int?))) { result = new NumericSearch(); } else if (propertyType.Equals(typeof(DateTime)) || propertyType.Equals(typeof(DateTime?))) { result = new DateSearch(); } else if (propertyType.IsEnum) { result = new EnumSearch(propertyType); } if (result != null) { result.Property = property; result.TargetTypeName = targetType.AssemblyQualifiedName; } return(result); }