20230818-1
This commit is contained in:
parent
4617d02649
commit
2fdb100ee0
@ -68,7 +68,7 @@ public class MySqlEngine: IDbEngine
|
||||
public async Task<IEnumerable<T>> QueryAsync<T> (string sql, object model)
|
||||
{
|
||||
// Подключаемся к БД
|
||||
await using MySqlConnection? connection = new(ConnectionString);
|
||||
await using MySqlConnection connection = new(ConnectionString);
|
||||
|
||||
// Открываем соединение
|
||||
await connection.OpenAsync();
|
||||
@ -80,35 +80,91 @@ public class MySqlEngine: IDbEngine
|
||||
#endregion
|
||||
|
||||
#region Получение
|
||||
public async Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null)
|
||||
{
|
||||
string sql = $@"SELECT
|
||||
{(columns.Any() ? string.Join(", ", columns) : "*")}
|
||||
FROM {table} ";
|
||||
|
||||
/// <summary>
|
||||
/// Выборка данных из таблицы
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Тип данных</typeparam>
|
||||
/// <param name="table">Имя таблицы</param>
|
||||
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
|
||||
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
|
||||
/// <param name="orderBy">Сортировка</param>
|
||||
/// <param name="limit">Сколько максимально элементов должно быть в выборке (0 -- без ограничения)</param>
|
||||
/// <returns>Массив типа <see cref="T"/></returns>
|
||||
public async Task<IEnumerable<T>> SelectAsync<T>(string table, string[] columns,
|
||||
List<KeyValue<string, string>> where, string? orderBy, int limit = 0)
|
||||
{
|
||||
// Формирую запрос
|
||||
string sql = $"""
|
||||
SELECT
|
||||
{(columns.Any() ? string.Join(", ", columns) : "*")}
|
||||
FROM {table}
|
||||
""";
|
||||
|
||||
// Создаю массив where параметров
|
||||
List<string> whereCondition = new();
|
||||
|
||||
// Создаю массив значений
|
||||
List<string> paramsValues = new();
|
||||
|
||||
// Если заданы параметры where
|
||||
if (where.Any())
|
||||
{
|
||||
// - то формирую массив where из where-запроса
|
||||
whereCondition.AddRange(where.Select(static whereItem => $"{whereItem.Key}=@{whereItem.Key}"));
|
||||
// - и значения параметров
|
||||
paramsValues.AddRange(where.Select(static whereItem => $"@{whereItem.Key}={whereItem.Value}"));
|
||||
}
|
||||
|
||||
// Если массив where параметров не пуст
|
||||
if (whereCondition.Any())
|
||||
// - то добавляю к запросу
|
||||
sql += $" WHERE {string.Join(", ", whereCondition.ToArray())}";
|
||||
|
||||
// Если добавлена сортировка
|
||||
if (orderBy != null)
|
||||
// - то добавляю сортировку к запросу
|
||||
sql += $" ORDER BY {orderBy}";
|
||||
|
||||
// Если установлено запрашиваемое число элементов
|
||||
if (limit > 0)
|
||||
// - то вводим ограничение
|
||||
sql += $" LIMIT {limit}";
|
||||
|
||||
// Осуществляю запрос и возвращаю результат
|
||||
return await QueryAsync<T>(sql, paramsValues.ToArray());
|
||||
}
|
||||
|
||||
public async Task<T> SelectRowAsync<T> (string table, List<string> columns, KeyValue<string, string> where, string? orderBy = null) => throw new NotImplementedException();
|
||||
/// <summary>
|
||||
/// Выборка строки из таблицы
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Тип данных</typeparam>
|
||||
/// <param name="table">Имя таблицы</param>
|
||||
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
|
||||
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
|
||||
/// <param name="orderBy">Сортировка</param>
|
||||
/// <returns>Тип <see cref="T"/> или null</returns>
|
||||
public async Task<T?> SelectRowAsync<T>(string table, string[] columns, List<KeyValue<string, string>> where,
|
||||
string? orderBy = null) => (await SelectAsync<T>(table, columns, where, orderBy, 1)).FirstOrDefault();
|
||||
|
||||
#endregion
|
||||
|
||||
public async Task<int> CountAsync (string table) => throw new NotImplementedException();
|
||||
#region Вычисление числа элементов в таблице
|
||||
/// <summary>
|
||||
/// Вычисляет число строк в таблице <paramref name="table"/>
|
||||
/// </summary>
|
||||
/// <param name="table">Таблица</param>
|
||||
/// <returns>Число строк в таблице <paramref name="table"/></returns>
|
||||
public async Task<int> CountAsync(string table)
|
||||
{
|
||||
// Задаю запрос
|
||||
string sql = $"SELECT COUNT(*) FROM {table}";
|
||||
|
||||
// Выполняю запрос
|
||||
return (await QueryAsync<int>(sql, new())).FirstOrDefault();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public async Task<TPit> InsertAsync<T, TPit> (string table, T entity, KeyValue<string, TPit> primaryIndex) => throw new NotImplementedException();
|
||||
|
||||
@ -119,4 +175,4 @@ public class MySqlEngine: IDbEngine
|
||||
public async Task<bool> DeleteAsync<T> (string table, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||
|
||||
public async Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||
}}
|
||||
}
|
@ -37,15 +37,38 @@ public interface IDbEngine
|
||||
#endregion
|
||||
|
||||
#region Получение
|
||||
Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null);
|
||||
|
||||
Task<T> SelectRowAsync<T> (string table, List<string> columns, KeyValue<string, string> where, string? orderBy = null);
|
||||
/// <summary>
|
||||
/// Выборка данных из таблицы
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Тип данных</typeparam>
|
||||
/// <param name="table">Имя таблицы</param>
|
||||
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
|
||||
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
|
||||
/// <param name="orderBy">Сортировка</param>
|
||||
/// <param name="limit">Сколько максимально элементов должно быть в выборке (0 -- без ограничения)</param>
|
||||
/// <returns>Массив типа <see cref="T"/></returns>
|
||||
Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy, int limit = 0);
|
||||
|
||||
/// <summary>
|
||||
/// Выборка строки из таблицы
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Тип данных</typeparam>
|
||||
/// <param name="table">Имя таблицы</param>
|
||||
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
|
||||
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
|
||||
/// <param name="orderBy">Сортировка</param>
|
||||
/// <returns>Тип <see cref="T"/> или null</returns>
|
||||
Task<T?> SelectRowAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null);
|
||||
#endregion
|
||||
|
||||
#region Вычисление числа элементов в таблице
|
||||
|
||||
/// <summary>
|
||||
/// Вычисляет число строк в таблице <paramref name="table"/>
|
||||
/// </summary>
|
||||
/// <param name="table">Таблица</param>
|
||||
/// <returns>Число строк в таблице <paramref name="table"/></returns>
|
||||
Task<int> CountAsync (string table);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Добавление строки в таблицу
|
||||
|
Loading…
x
Reference in New Issue
Block a user