将表别名与SqlExpressionSelectFilter一起使用时丢失

我有一种情况,应根据相关表中的值将记录排除在外。当将联接与SqlExpressionSelectFilter一起使用时,生成的SQL不会对部分查询使用表别名。我正在运行ServiceStack 5.5。

OrmLiteConfig.SqlExpressionSelectFilter = q => {
    if (q.ModelDef.ModelType.HasInterface(typeof(IJoinFilter))) {
        q.LeftJoin<IJoinFilter, FirstTable>((f, j) => f.FirstTableId == j.Id)
             .Where<FirstTable>(j => j.Deleted != true);
    }
};

只需选择以下内容:

db.Select(db.From<SecondTable>().Where<SecondTable>(x => x.Id == 1));

这会生成类似以下内容的内容:

SELECT SecondTable.Id, SecondTable.FirstTableId, SecondTable.Deleted 
FROM SecondTable 
LEFT JOIN FirstTable ON (SecondTable.FirstTableId = FirstTable.Id)
WHERE (Id = 1) AND (FirstTable.Deleted <> 1)

请注意,where子句中的ID不以“ SecondTable”开头。在某些情况下,select子句将不包含别名。

是否支持选择过滤器中的联接?有没有建议的方法代替我做这种全局过滤?

我在这里创建了一个快速复制:https : //github.com/TheScobey/OrmliteSelectFilterIssue

神话

SqlExpressionSelectFilter创建表达式之后应用,因此将不会影响以前的表达式,您可以尝试使用以下方式为Source From表赋予别名:

db.Select(db.From<SecondTable>(db.TableAlias(nameof(SecondTable)))
    .Where<SecondTable>(x => x.Id == 1));

一种替代方法是强制查询在查询中包括表前缀,例如:

var q = db.From<SecondTable>();
q.PrefixFieldWithTableName = true;
q.Where<SecondTable>(x => x.Id == 1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将RabbitMQ与Logstash一起使用时丢失消息

将 RabbitMQ 与 .NET Core WebAPI 一起使用时丢失消息

将输入绑定与存储表一起使用时,如何访问RowKey(和PartitionKey)?

将MAX()与表JOIN一起使用时出现问题

将 NetworkBoundRepository 与协程一起使用时,单独保存远程数据相关表(android)

在将VLOOKUP()与多个工作表和多个输入一起使用时遇到麻烦

将 pivot_longer 与多个变量一起使用时,我丢失了常量变量(包括 id)

无法将 scp 与 bash 别名一起使用

将argv与函数一起使用时出错

将RxJava与Room一起使用时循环播放

将statsmodels与pyinstaller一起使用时出错

将sklearn的BaggingClassifier与GridSearchCV一起使用时的ZeroDivisionError

将Objectify与GAE一起使用时,ObjectifyService的NoClassDefFoundError

将Laravel Forge与Bitbucket一起使用时的问题

将fnAddData与数据顺序一起使用时出错

将Bean验证与焊接一起使用时的ClassCastException

将 ScrollChor 与 NavItem 一起使用时出错

将FutureBuilder与本地JSON一起使用时出错

将AutoMapper与异步方法一起使用时出错

将ngMaterial与ngRoute一起使用时出错

将Express会话与Express一起使用时出错

将Chromium与Fedora一起使用时的安全警告

将 .next() 与 takeUntil 一起使用时的参数

将SharedElementTransition与recyclerView一起使用时出错

将SparkJob与NamedRddSupport一起使用时出错

将fabricjs与nodejs一起使用时的Gebbrich字母

将 scanf() 与“%c”一起使用时的前导空格

将pynput与pyinstaller一起使用时出现错误

将cout与指针值一起使用时出错