DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.4k stars 1.34k forks source link

[feature request] SqlSugar dynamic 结果 考虑自己建立一个 动态字典,不要用 ExpandoObject #1307

Open John0King opened 2 hours ago

John0King commented 2 hours ago

backgorund / 背景

数据库里面字段名称有的数据库区分大小写, 有的不区分大小写, 对于区分大小的的数据库比如 Oracle/ Postgresql, 等他们默认的大小写名称不同, 对于编程这边很难对dynamic 字段的大小写进行定下来, 而 dataTable 可以同时支持 区分大小写和不区分大小写, 基本规则是, dataTable 优先匹配区分大小写字段名, 找不到再以 StringComparer.OrdinalIgnoreCase 来匹配第一个.

select aBc from someTable

以上sql, 在 ORALCE 里面相当于 select "ABC" from "SOMETABLE" 而在 posgresql 里面相当于 select "abc" from "sometable"

建议

采用自己独立的 IDynamicMetaObjectProvider 跟 DataTable 一样, 优先以 区分大小写的匹配, 再以不区分大小写的方式匹配, 这样以下语句都可以得到值

var a= db.Ado.SqlQuerySingle<dynamic>(“”“
select 1 as "Abc" , 2 as "abc" , 3 as "dEf" from dual
”“”);

a.Abc // 1
a.abc // 2
a.def // 3
DotNetNext commented 2 hours ago

你是用的实体 查询还是用的 db.ado 查询描述清楚问题 取一个具体用例