从 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。
我有一个方法接受 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。