Позднее игра об этом, но вы могли бы расширить класс 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 . Это может лучше соответствовать вашим потребностям.
Все это говорит, как минимум, я надеюсь, что это даст вам какое-то направление для принятия решения или потенциальной оценки производительности.