Open zhaxg opened 3 months ago
两个静态方法冲突是什么意思?
[ExpressionCall]
public static class DbFunc {
//必要定义 static + ThreadLocal
static ThreadLocal
public static DateTime FormatDateTime(this DateTime that, string arg1) { var up = context.Value; if (up.DataType == FreeSql.DataType.Sqlite) //重写内容 up.Result = $"date_format({up.ParsedContent["that"]}, {up.ParsedContent["arg1"]})"; return that; } } 这个方法就是一个很直接的静态扩展方法,没有办法确保不会被团队的人误用了,如果是string.isnullorempty这种,我在正常的逻辑里面可以使用,那么在freesql的查询表达式应该是一致的逻辑,而不是两套逻辑,另外一个isnullorempty扩展方法是特定给freesql去解析sql的
你可以看看与了解一下linq2db的自定义函数如何实现的
怎么会被乱用呢,乱用不应该是团队规范的问题么
扩展方法的命名和表达式函数表示的 SQL 字符串没有啥关联 命名可以有个规范 比如 FormatDateTimeForSqlFun 另外FreeSql经历了这么多版本的迭代肯定不会去修改 自定义解析 的逻辑
如果楼主就觉得 linq2db 很好用的话。。。 要不楼主试着研究下 linq2db的自定义函数 然后 结合 freesql 尝试自己实现一下 弄个Demo 然后 提个 PR ?
FYI, we at Linq To DB
are moving away from mapping one member expression to another expression approach (Expression.Map*
APIs) as being troublesome to approach with member builders which convert specific member call/property directly to SQL per-database
Feature 特性
简要描述原因
使用场景