/// <summary> /// Creates a Where method call expression to be invoked on an expression e.g. (parameter, member, method call) of type IQueryable<T>. /// </summary> /// <typeparam name="TSource"></typeparam> /// <param name="expression"></param> /// <param name="filterGroup"></param> /// <param name="parameterName"></param> /// <returns></returns> public static MethodCallExpression GetWhere <TSource>(this Expression expression, DataSource.FilterGroup filterGroup) where TSource : class { LambdaExpression filterExpression = filterGroup.GetFilterExpression <TSource>(); Type[] genericArgumentsForMethod = new Type[] { typeof(TSource) }; return(Expression.Call(typeof(Queryable), "Where", genericArgumentsForMethod, expression, filterExpression)); }
/// <summary> /// Creates a Where lambda expression from a filter group /// </summary> /// <typeparam name="T"></typeparam> /// <param name="group"></param> /// <returns></returns> public static Expression <Func <IQueryable <T>, IQueryable <T> > > BuildWhereExpression <T>(this DataSource.FilterGroup group) where T : class { if (group == null) { return(null); } ParameterExpression param = Expression.Parameter(typeof(IQueryable <T>), "q"); MethodCallExpression mce = param.GetWhere <T>(group); return(Expression.Lambda <Func <IQueryable <T>, IQueryable <T> > >(mce, param)); }