Как сначала скомпилировать сложные запросы с помощью SqlKata и выполнить позже - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу создать и скомпилировать SQL-запрос, используя SqlKata, а затем в какой-то другой функции выполнить этот запрос.На основании документации не очевидно, как это делается, особенно для сложных запросов.

Я пытался преобразовать запрос в строку, а затем запустить его, но это не является правильным решением, истрока плохо компилируется для сложных запросов.

    public class TradeLoader : ITradeLoader
    {

        public SqlResult CreateTradeQuery(Target targets, Group groups, DateTime fromTime)
        {
            var compiler = new SqlServerCompiler();
            var query = new Query().FromRaw(@"
                    [trades] AS t WITH (NOLOCK)
                    LEFT JOIN [info] AS i WITH (NOLOCK)
                    ON t.Id = i.Id
                ")
                .Select("i.Name", "t.Price", "t.Volume")
                .WhereTime("t.CreatedDate", ">", fromTime);

            var subQuery = new Query(@"
                    [trades] AS t WITH (NOLOCK)
                    LEFT JOIN [info] AS i WITH (NOLOCK)
                    ON t.Id = i.Id
                ");
            foreach (var target in targets)
            {
                subQuery.OrWhere(q => q.WhereIn("i.Name", groups.Keys).WhereIn("i.GroupName", target.Value));
            }

            query.Where(subQuery);
            SqlResult result = compiler.Compile(query);
            return result; // How to execute this somewhere else?
        }
    }

Мне не ясно, как я могу выполнить этот запрос где-то еще, используя SqlKata.Execution или System.Data.SqlClient.Желательно, чтобы я мог запустить его в обоих случаях.

...