public static string ToSql <TEntity>(this IQueryable <TEntity> query) where TEntity : class { Microsoft.EntityFrameworkCore.Storage.IRelationalCommand command = GetCommand(query); string sql = command.CommandText; return(sql); }
//link https://www.thetopsites.net/article/51583047.shtml public static IEnumerable <string> ToParameters <TEntity>(this IQueryable <TEntity> query) where TEntity : class { var dicRet = new List <string>(); Microsoft.EntityFrameworkCore.Storage.IRelationalCommand command = GetCommand(query); foreach (var item in command.Parameters) { dicRet.Add($"@{item.InvariantName}"); } return(dicRet); }
//https://stackoverflow.com/a/51583047 public static string ToSql <TEntity>(this IQueryable <TEntity> query) where TEntity : class { IEnumerator <TEntity> enumerator = query.Provider.Execute <IEnumerable <TEntity> >(query.Expression).GetEnumerator(); object relationalCommandCache = enumerator.Private("_relationalCommandCache"); SelectExpression selectExpression = relationalCommandCache.Private <SelectExpression>("_selectExpression"); IQuerySqlGeneratorFactory factory = relationalCommandCache.Private <IQuerySqlGeneratorFactory>("_querySqlGeneratorFactory"); QuerySqlGenerator sqlGenerator = factory.Create(); Microsoft.EntityFrameworkCore.Storage.IRelationalCommand command = sqlGenerator.GetCommand(selectExpression); string sql = command.CommandText; return(sql); }