, LINQ - LINQ . , LINQ! LINQ , , , .
, LINQ , . , , switch, . System.Linq.Expressions :
EDIT: . investments , . EF ( _performance _investments).
public static IQueryable<Investment> PerformanceSearch(Expression<Func<Performance, double>> searchColumn, double minValue, double maxValue) {
MemberExpression columnExpression = searchColumn.Body as MemberExpression;
ParameterExpression parameterExpression = (ParameterExpression)columnExpression.Expression;
Expression minValueExpression = Expression.Constant(minValue);
Expression maxValueExpression = Expression.Constant(maxValue);
Expression minComparisonExpression = Expression.GreaterThanOrEqual(columnExpression, minValueExpression);
Expression maxComparisonExpression = Expression.LessThanOrEqual(columnExpression, maxValueExpression);
Expression filterExpression = Expression.AndAlso(minComparisonExpression, maxComparisonExpression);
Expression<Func<Performance, bool>> filterLambdaExpression = Expression.Lambda<Func<Performance, bool>>(filterExpression, parameterExpression);
var query = (from i in _investments
join p in _performance.AsQueryable().Where(filterLambdaExpression)
on i.InvestmentId equals p.InvestmentId
select i);
return query.AsQueryable();
}
PerformanceSearch , :
private static IList<Investment> _investments;
private static IList<Performance> _performance;
static void Main(string[] args) {
BuildMockDataset();
var results = PerformanceSearch(x => x.Return1Month, 300, 1000);
}
, double Performance searchColumn, min max double.