private static SimpleExpression CompileExpression <T>(DonationSearchCriteria donationCriteria, T amount, dynamic column) where T : IComparable <T> { switch (donationCriteria.SearchOperator) { case SearchOperator.EqualTo: return(column == amount); case SearchOperator.NotEqualTo: return(column != amount); case SearchOperator.GreaterThan: return(column > amount); case SearchOperator.GreaterThanOrEqualTo: return(column >= amount); case SearchOperator.LessThan: return(column < amount); case SearchOperator.LessThanOrEqualTo: return(column <= amount); default: throw new InvalidOperationException("Operator not valid with decimal value."); } }
private SimpleExpression CompileTotalDonationCriteria(DonationSearchCriteria donationCriteria) { var column = db.Members.Donations.Amount.Sum(); decimal amount; if (!decimal.TryParse(donationCriteria.Value, out amount)) { throw new InvalidOperationException("Cannot convert value to decimal."); } return(CompileExpression(donationCriteria, amount, column)); }
private SimpleExpression CompileLastDonationDate(DonationSearchCriteria donationCriteria) { var column = db.Members.Donations.Date.Max(); DateTime date; if (!DateTime.TryParse(donationCriteria.Value, out date)) { throw new InvalidOperationException("Cannot convert value to date."); } return(CompileExpression(donationCriteria, date, column)); }