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