从 SqlExpression<T> 获取 tableDefs

Get tableDefs from SqlExpression<T>

我有一个方法接受 SqlExpression<T> 的参数。该方法基本上采用 OrmLite 查询并对其执行一些从字符串输入生成的查询。

我真的需要能够从 SqlExpression<T> 获取查询的所有 table 类型,这样我才能生成表达式。

在调试器中,我可以看到主要 table 和加入的 table 位于一个名为 tableDefs 的受保护 属性 中,但我看不到任何 public存取器。

我可以通过反射得到:

public static class SqlExpressionExtension
{
    public static List<Type> GeTableTypes<T>(this SqlExpression<T> query)
    {
        return ((List<ModelDefinition>)query.GetType().GetField("tableDefs", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(query))
            .Select(x => x.ModelType).ToList(); 
    }
}

但我认为使用 public 访问器会更好。

是否有正确的方法从 SqlExpression<T> 中获取所有 table 类型?

我刚刚在 this commit 中添加了 GetAllTables() API,其中 returns 在 SqlExpression<T> 中添加了主表和联接表。

这在最新的 ServiceStack v5.11.1+ 中可用,现在是 available on MyGet