/// <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));
        }