Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Expression<Func<T, bool>> GetPredicate(List<GridFilter> filterClasses)
- {
- var retPredicate = PredicateBuilder.True<T>();
- foreach (GridFilter columnFilterClass in filterClasses.Where(i => ValidateFilter(i) && i != null))
- {
- GridFilter @class = columnFilterClass;
- decimal outResult;
- DateTime outDate;
- switch (columnFilterClass.Comparer)
- {
- case FilterComparisons.EqualTo:
- if (decimal.TryParse(@class.FilterValue.ToString(), out outResult))
- {
- retPredicate = retPredicate.And(p => decimal.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outResult) &&
- decimal.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) == decimal.Parse(@class.FilterValue.ToString()));
- }
- else if (DateTime.TryParse(@class.FilterValue.ToString(), out outDate))
- {
- retPredicate = retPredicate.And(p => DateTime.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outDate) &&
- DateTime.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()).ToShortDateString() == DateTime.Parse(@class.FilterValue.ToString()).ToShortDateString());
- }
- else
- {
- retPredicate = retPredicate.And(p => ((p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null) == null) ? null : p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) == @class.FilterValue.ToString());
- }
- break;
- case FilterComparisons.NotEqualTo:
- if (decimal.TryParse(@class.FilterValue.ToString(), out outResult))
- {
- retPredicate = retPredicate.And(p => decimal.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outResult) &&
- decimal.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) != decimal.Parse(@class.FilterValue.ToString()));
- }
- else if (DateTime.TryParse(@class.FilterValue.ToString(), out outDate))
- {
- retPredicate = retPredicate.And(p => DateTime.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outDate) &&
- DateTime.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()).ToShortDateString() != DateTime.Parse(@class.FilterValue.ToString()).ToShortDateString());
- }
- else
- {
- retPredicate = retPredicate.And(p => ((p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null) == null) ? null : p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) != @class.FilterValue.ToString());
- }
- break;
- case FilterComparisons.GreaterThan:
- if (decimal.TryParse(@class.FilterValue.ToString(), out outResult))
- {
- retPredicate = retPredicate.And(p => decimal.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outResult) &&
- decimal.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) > decimal.Parse(@class.FilterValue.ToString()));
- }
- else
- {
- retPredicate = retPredicate.And(p => DateTime.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outDate) &&
- DateTime.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) > DateTime.Parse(@class.FilterValue.ToString()));
- }
- break;
- case FilterComparisons.LessThan:
- if (decimal.TryParse(@class.FilterValue.ToString(), out outResult))
- {
- retPredicate = retPredicate.And(p => decimal.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outResult) &&
- decimal.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) < decimal.Parse(@class.FilterValue.ToString()));
- }
- else
- {
- retPredicate = retPredicate.And(p => DateTime.TryParse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString(), out outDate) &&
- DateTime.Parse(p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()) < DateTime.Parse(@class.FilterValue.ToString()));
- }
- break;
- case FilterComparisons.NotEmpty:
- retPredicate = retPredicate.And(p => !String.IsNullOrEmpty((p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null) == null) ? null : p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()));
- break;
- case FilterComparisons.Empty:
- retPredicate = retPredicate.And(p => String.IsNullOrEmpty((p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null) == null) ? null : p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()));
- break;
- case FilterComparisons.Containing:
- retPredicate = retPredicate.And(p => ((p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null) == null) ? "" : p.GetType().GetProperty(@class.FilterMemberName).GetValue(p, null).ToString()).ToUpper().Contains(@class.FilterValue.ToString().ToUpper()));
- break;
- default:
- throw new NotImplementedException("The comparer selected is not yet implemented.");
- }
- }
- return retPredicate;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement