/// <summary>
        /// Parse the selection clause
        /// </summary>
        /// <param name="properties">The select properties clause</param>
        /// <param name="source"></param>
        /// <param name="suffix"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static IQueryable <T> ParseSelect <T>(string properties, IQueryable <T> source, string paramName = null)
            where T : class, new()
        {
            if (String.IsNullOrEmpty(properties) || properties.Equals("*"))
            {
                return(source);
            }
            LinqSelectParser          parser     = new LinqSelectParser();
            List <SelectEntry>        props      = parser.ParsePropertyNames(properties.Replace(" ", String.Empty));
            Expression <Func <T, T> > expression = (Expression <Func <T, T> >)parser.Process <T, T>(props, typeof(T), typeof(T), paramName);

            return(source.Select <T, T>(expression));
        }
 public IQueryable <T> Parse <T>(IFilter filter, IQueryable <T> source) where T : class, new()
 {
     //parse where clause
     source = LinqWhereExpressionBuilder.Parse <T>(filter.Where, source, filter.As);
     //parse the include clause
     source = LinqIncludeParser.Parse <T>(filter.With, source, filter.As);
     //parse the order clause
     source = LinqOrderParser.ParseOrder <T>(filter.OrderBy, source);
     //parse the pagination
     source = LinqLimitParser.ParseLimit <T>(filter.Skip, filter.Take, source);
     //parse the select clause
     source = LinqSelectParser.ParseSelect <T>(filter.Properties, source, filter.As);
     //return the result
     return(source);
 }