Beispiel #1
0
        private string ToSql(Expression expression, out ODataInlineCountOption inlineCount, out List <Parameter> parameters, out Type rootElementType, out LinqToODataTranslator.ResultTranslator resultTranslator)
        {
            // translate LINQ expression to OData
            var translator = new LinqToODataTranslator();

            IQueryable rootQuery;
            var        oDataExpression = translator.Translate(expression, out rootQuery, out resultTranslator);

            rootElementType = rootQuery.ElementType;

            var queryExpression = oDataExpression as ODataQueryExpression;

            Throw <InvalidOperationException> .If(oDataExpression == null, "A queryable expression must translate to a query ODataExpression");

            inlineCount = queryExpression.InlineCount;

            // get the table SQL from the root query
            var tableQuery = rootQuery as ODataSqlQuery;

            Throw <InvalidOperationException> .If(
                tableQuery == null,
                () => "Translate: expected a root query query of type " + typeof(ODataSqlQuery) + "; found " + tableQuery
                );

            Throw <InvalidOperationException> .If(tableQuery.tableSql == null, "Invalid root query");

            // translate ODataExpression to SQL
            var sql = ODataToSqlTranslator.Translate(this.syntax, tableQuery.tableSql, queryExpression, out parameters);

            return(sql);
        }
Beispiel #2
0
        public static string Translate(SqlSyntax syntaxProvider, string tableSql, ODataQueryExpression query, out List <Parameter> parameters)
        {
            Throw.IfNull(syntaxProvider, "databaseProvider");
            Throw.If(string.IsNullOrEmpty(tableSql), "tableSql is required");
            Throw.IfNull(query, "query");

            var translator = new ODataToSqlTranslator(syntaxProvider, tableSql);

            translator.Visit(query);

            var sql = translator.sqlBuilder.ToString();

            parameters = translator.parameters.Values.ToList();
            return(sql);
        }