标签: #数据访问

C# 表达式树深度解析:自建 ORM 如何把 LINQ 翻译成 SQL

很多人每天写 LINQ,却不知道它背后是一棵可以被拆解翻译的表达式树。Entity Framework 能把 Where(x => x.Name == "张三") 转成 SQL,靠的就是表达式树解析。本文基于生产项目中的 ExpressionParser,从零实现了一个表达式树解析器,能把 LINQ 的 Where 条件和 OrderBy 排序翻译成数据库查询条件,配合反射构建的元数据缓存,构成了一个自实现 ORM 的核心查询层。

手写 LINQ 表达式树解析器:将 Lambda 条件翻译为数据库查询

从 SwitchData 项目的 ExpressionParser 出发,手把手拆解如何把 LINQ 表达式树拆解成结构化查询条件。详解 ExpressionVisitor 遍历、闭包常量提取、运算符反转、括号分组还原,以及 MetadataCache 元数据缓存和 PredicateBuilder 动态表达式组合,读完就能手写一个轻量 LINQ Provider。

C# 表达式树编译实战:从零实现高性能属性访问器

深入讲解如何利用 C# 表达式树(Expression Tree)编译技术,把反射式的属性访问编译成原生委托。本文从 SwitchData 项目的 MetadataCache.CreateGetter/CreateSetter 真实代码出发,手把手实现一个并发安全的 ConcurrentDictionary + 编译缓存方案,让 ORM 对象映射性能达到接近直接调用的水平。

从零实现可扩展查询条件体系:FilterOperator 策略模式 + 组合模式构建动态 SQL WHERE 子句

在业务系统中,动态构建 SQL WHERE 子句是绕不开的需求。本文以 SwitchData 项目中的 FilterOperator + IFilterNode 实现为例,剖析一套完整的可扩展查询条件体系:策略模式封装 15 种运算符的 SQL 生成逻辑,组合模式构建条件树支持 AND/OR 嵌套,递归遍历 + 参数化查询安全翻译成 SQL,还能通过 virtual 属性适配不同数据库方言。

C# 反射表达式微型 ORM:MetadataCache 元数据驱动的 CRUD 实现

本文基于 SwitchData 项目的实际代码,讲解如何从零构建一个基于反射表达式的微型 ORM。通过 MetadataCache 实现元数据驱动,使用表达式树编译强类型 Getter/Setter 委托替代反射调用,性能接近直接调用。实现 INSERT/UPDATE/DELETE 的 SQL 自动生成、ObjectMapper 对象映射、实体验证机制等完整功能,无需依赖任何第三方 ORM 框架。

从零构建 ADO.NET 抽象层:参数缓存、Schema 缓存与数据类型映射完整实现

本文基于实际项目源码,详细讲解如何从零构建一套完整的 ADO.NET 数据库抽象层。通过 Database 基类封装通用数据库操作,使用 ParameterCache 和 SchemaCache 实现参数与元数据缓存,提供 CLR 类型到 DbType 的自动映射,支持批量操作和异步调用。这套抽象层已在生产环境中运行良好,显著提升了数据库访问的性能和代码可维护性。