123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using Microsoft.EntityFrameworkCore.Query;
- using Microsoft.EntityFrameworkCore.Query.Internal;
- using Microsoft.EntityFrameworkCore.Storage;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace YLShipBuildLandMap.Entity.Extensions
- {
- public static class QueryableExtensions
- {
- private static readonly TypeInfo QueryCompilerTypeInfo = typeof(QueryCompiler).GetTypeInfo();
- private static readonly FieldInfo QueryCompilerField = typeof(EntityQueryProvider).GetTypeInfo().DeclaredFields.First(x => x.Name == "_queryCompiler");
- private static readonly FieldInfo QueryModelGeneratorField = typeof(QueryCompiler).GetTypeInfo().DeclaredFields.First(x => x.Name == "_queryModelGenerator");
- private static readonly FieldInfo DataBaseField = QueryCompilerTypeInfo.DeclaredFields.Single(x => x.Name == "_database");
- private static readonly PropertyInfo DatabaseDependenciesField = typeof(Microsoft.EntityFrameworkCore.Storage.Database).GetTypeInfo().DeclaredProperties.Single(x => x.Name == "Dependencies");
- /// <summary>
- /// 获取本次查询SQL语句
- /// </summary>
- /// <typeparam name="TEntity"></typeparam>
- /// <param name="query"></param>
- /// <returns></returns>
- /*public static string ToSql<TEntity>(this IQueryable<TEntity> query)
- {
- var queryCompiler = (QueryCompiler)QueryCompilerField.GetValue(query.Provider);
- var queryModelGenerator = (QueryModelGenerator)QueryModelGeneratorField.GetValue(queryCompiler);
- var queryModel = queryModelGenerator.ParseQuery(query.Expression);
- var database = DataBaseField.GetValue(queryCompiler);
- var databaseDependencies = (DatabaseDependencies)DatabaseDependenciesField.GetValue(database);
- var queryCompilationContext = databaseDependencies.QueryCompilationContextFactory.Create(false);
- var modelVisitor = (RelationalQueryModelVisitor)queryCompilationContext.CreateQueryModelVisitor();
- modelVisitor.CreateQueryExecutor<TEntity>(queryModel);
- var sql = modelVisitor.Queries.First().ToString();
- return sql;
- }*/
- }
- }
|