Выполнить несколько запросов, используя SqlKata - PullRequest
0 голосов
/ 01 мая 2018

Возможно ли выполнить несколько запросов одновременно с использованием SqlKata.

В настоящее время у меня есть следующий код:

var latestUsersQuery = db.Query("tbl_users").Where("created_at", ">", from);
var activitiesQuery = db.Query("tbl_activities").WhereIn("user_id", latestUsersQuery.Clone());

и я опрашиваю каждого в отдельности.

var latestUsers = latestUsersQuery.Get();
var activities = activitiesQuery().Get();

Мне интересно, есть ли способ выполнить оба запроса одновременно.

// for example something like this
var results = db.GetAll(latestUsersQuery, activitiesQuery);

Спасибо.

1 Ответ

0 голосов
/ 01 августа 2018

Позднее игра об этом, но вы могли бы расширить класс QueryFactory SqlKata подобно тому, как они пишут другие методы; используя методы расширения.

using SqlKata;
using SqlKata.Execution;
using System.Collections.Generic;
using System.Linq;
// ...

public static class QueryFactoryExtensions
{
    public static IEnumerable<IEnumerable<T>> GetAll<T>(this QueryFactory db, params Query[] queries)
    {
        return queries.Select(q =>
        {
            return SqlKata.Execution.QueryFactoryExtensions.Get<T>(db, q);
        });
    }
    public static IEnumerable<IEnumerable<dynamic>> GetAll(this QueryFactory db, params Query[] queries)
    {
        return GetAll<dynamic>(db, queries);
    }
}

Использование будет выглядеть так:

var query1 = new Query();
var query2 = new Query();

var results = db.GetAll(query1, query2)

Оттуда вы можете: перечислить его, привести к массиву и получить доступ по индексу и т. Д.

Имейте в виду, что это не отправка одного запроса к базе данных, как указано в комментариях к ОП. Если производительность действительно то, что вам нужно, то вы можете посмотреть на использование метода расширения Dapper QueryMultiple вместо Query (это то, что SqlKata вызывает для методов Get ()). Я недостаточно знаком с основной магией, которую делает Даппер, чтобы иметь возможность уверенно указывать вам направление. Другой возможностью для вас может быть добавление расширений для GetAsync вместо Get . Это может лучше соответствовать вашим потребностям.

Все это говорит, как минимум, я надеюсь, что это даст вам какое-то направление для принятия решения или потенциальной оценки производительности.

...