【发布时间】:2019-04-08 15:06:42
【问题描述】:
我有一种情况,应根据相关表中的值排除记录。当使用带有 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
【问题讨论】:
标签: servicestack ormlite-servicestack