有没有一种方法可以处理SQLKata中的现有查询?

时间:2020-07-01 10:29:25

标签: c# sqlkata

我正在寻找一种适用于C#的灵活查询生成器,该查询生成器将在没有完整ORM的所有开销的情况下运行。我正在考虑使用SQL Kata,但是我有一个不确定的用例:

在我们的应用程序中,我们构建“基础”查询,该查询从表中进行原始选择,然后将其用作子查询,在此子查询上执行分组和其他分析。构建这些基本查询时,我们尚不知道最终输出中实际需要哪些确切字段,因此我们将所有字段都包括在选择列表中。

我正在寻找一种查看最终查询的方法,然后使用实际的选择列表来限制基本查询正在检索的字段。这将为我们的柱状商店提供性能优势。

是否可以在SQL Kata中遍历和修改查询?
像这样-向我显示外部查询中的所有字段,向我显示内部“基本”查询中的所有字段,然后让我修改内部选择列表。

1 个答案:

答案 0 :(得分:1)

简短的回答是,您可以检查查询实例并遍历选定的列,如下所示:

closeBottomSheetHandler

但是我建议的是构建基本查询而不选择任何列, 然后在以后的阶段中仅选择所需的列。

请注意,如果在编译阶段未选择任何列,则SqlKata会将其转换为 openBottomSheetHandler() { return this.BottomSheet.interpolate({ inputRange: [1, 2], outputRange: [SCREEN_HEIGHT / 1.48, SCREEN_HEIGHT / 2.1], }); } closeBottomSheetHandler() { return this.BottomSheet.interpolate({ inputRange: [1, 2], outputRange: [SCREEN_HEIGHT / 1.48, SCREEN_HEIGHT / 2.1], }); } ,这对您来说很方便。

var columns = query.GetComponents<AbstractColumn>("select");

foreach(var column in columns)
{
    if(column is Column col)
    {
        Console.WriteLine(col.Name);

    } elseif(column is RawColumn raw) {
        Console.WriteLine(col.Expression);
    } elseif(column is QueryColumn subQuery) {
        // do something with subQuery.Query
    }    
}