Revenj.DatabasePersistence.Postgres.QueryGeneration.QueryComposition.QueryParts.GetQueryableExpression C# (CSharp) Method

GetQueryableExpression() private method

private GetQueryableExpression ( string name, IQueryable queryable ) : string
name string
queryable IQueryable
return string
        private string GetQueryableExpression(string name, IQueryable queryable)
        {
            var ce = queryable.Expression as ConstantExpression;
            if (ce != null)
            {
                if (ce.Type.IsGenericType)
                {
                    var gtd = ce.Type.GetGenericTypeDefinition();
                    if (gtd == typeof(Queryable<>))
                        return FromSqlSource(name, ce.Type.GetGenericArguments()[0]);
                    if (gtd == typeof(IQueryable<>))
                        return GetQuerySourceFromExpression(name, queryable.ElementType, queryable.Expression);
                }
                if (ce.Type.IsArray || ce.Value is Array)
                    return FormatStringArray(ce.Value, name, ce.Type);
                else if (ce.Value is IEnumerable)
                    return FormatStringEnumerable(ce.Value, name, ce.Type);
                //TODO this doesn't work most of the cases
                return "(SELECT {0} AS \"{1}\") AS \"{1}\"".With(ce.Value, name);
            }

            var mce = queryable.Expression as MethodCallExpression;
            if (mce != null && mce.Method.DeclaringType == typeof(System.Linq.Queryable) && mce.Method.Name == "Cast")
                return GetQuerySourceFromExpression(name, queryable.ElementType, mce.Arguments[0]);

            throw new NotSupportedException("unknown query source expression!");
        }