EntityFrameworkCore中linq转sql
来源:互联网 发布:网络质量监控技术 编辑:程序博客网 时间:2024/06/10 13:34
public class IQueryableExtensions { 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 PropertyInfo NodeTypeProviderField = QueryCompilerTypeInfo.DeclaredProperties.Single(x => x.Name == "NodeTypeProvider"); private static readonly MethodInfo CreateQueryParserMethod = QueryCompilerTypeInfo.DeclaredMethods.First(x => x.Name == "CreateQueryParser"); private static readonly FieldInfo DataBaseField = QueryCompilerTypeInfo.DeclaredFields.Single(x => x.Name == "_database"); private static readonly FieldInfo QueryCompilationContextFactoryField = typeof(Database).GetTypeInfo().DeclaredFields.Single(x => x.Name == "_queryCompilationContextFactory"); public static string ToSql<TEntity>(this IQueryable<TEntity> query) where TEntity : class { if (!(query is EntityQueryable<TEntity>) && !(query is InternalDbSet<TEntity>)) { throw new ArgumentException("Invalid query"); } var queryCompiler = (IQueryCompiler)QueryCompilerField.GetValue(query.Provider); var nodeTypeProvider = (INodeTypeProvider)NodeTypeProviderField.GetValue(queryCompiler); var parser = (IQueryParser)CreateQueryParserMethod.Invoke(queryCompiler, new object[] { nodeTypeProvider }); var queryModel = parser.GetParsedQuery(query.Expression); var database = DataBaseField.GetValue(queryCompiler); var queryCompilationContextFactory = (IQueryCompilationContextFactory)QueryCompilationContextFactoryField.GetValue(database); var queryCompilationContext = queryCompilationContextFactory.Create(false); var modelVisitor = (RelationalQueryModelVisitor)queryCompilationContext.CreateQueryModelVisitor(); modelVisitor.CreateQueryExecutor<TEntity>(queryModel); var sql = modelVisitor.Queries.First().ToString(); return sql; }}
转自:https://twitter.com/rjperes75
0 0
- EntityFrameworkCore中linq转sql
- EntityFrameworkCore执行SQL语句和存储过程
- [UWP]在UWP中使用EntityFrameworkCore + SQLite
- 转linq to sql
- 转linq to sql
- sql转Linq
- LINQ to SQL 中可以使用的LINQ函式
- LINQ : 在LINQ TO SQL中关闭ObjectTrackingEnabled提高性能
- LINQ : 如何在LINQ to SQL中管理冲突
- linq语句转SQL语句
- LINQ To SQL 中使用In
- LINQ To SQL中IN的用法
- linq,linq to sql
- [转自JeffreyZhao]在LINQ to SQL中使用Translate方法以及修改查询用SQL
- LINQ To SQL 之 Expression中如何定义String类型的GreaterThanOrEqual (转)
- linq to sql 中从dbml文件中创建数据库
- linq to sql 中从dbml文件中创建数据库
- LINQ中如何使用SQL中NOT IN
- Linux C语言编程-Linux网络通信--Linux上使用套接字(socket)来发送信息---知识点总结+实例
- ABBYY FineReader错误代码142和55
- 剑指Offer面试题43(Java版):n个骰子的点数
- c++/c内存申请与释放
- 并发 防止 重复提交唯一数据
- EntityFrameworkCore中linq转sql
- DIV内容垂直居中
- Android二维码生成与扫描
- 索引解析
- Elasticsearch 配置详解
- 微信小程序-模版渲染
- BIF:python内置函数
- CXF
- MYSQL查看执行计划