private static void AddTypes(Dictionary <string, Type> dic, string name, Type type, KeyValuePair <string, ICollection <string> > select)
        {
            if (select.IsEmpty())
            {
                return;
            }

            var propertyTypes = select.Value.Select(v =>
            {
                var prop = type.GetProperty(v);
                return(new
                {
                    Name = name + "_" + prop.Name,
                    Type = prop.PropertyType
                });
            });

            if (!propertyTypes.Any())
            {
                dic.Add(name, type);
            }
            else
            {
                foreach (var propertyType in propertyTypes)
                {
                    dic.Add(propertyType.Name, propertyType.Type);
                }
            }
        }
        private static IEnumerable <Expression> GetParameterExpressions(ParameterExpression arg, KeyValuePair <string, ICollection <string> > parameter)
        {
            if (parameter.IsEmpty())
            {
                return(null);
            }

            if (parameter.Value == null || !parameter.Value.Any())
            {
                return(new Expression[] { arg });
            }

            var result = new List <Expression>();

            foreach (var parameterName in parameter.Value)
            {
                result.Add(Expression.Property(arg, parameterName));
            }

            return(result);
        }