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)
|
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();
|
await connection.OpenAsync();
|
||||||
@ -80,35 +80,91 @@ public class MySqlEngine: IDbEngine
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Получение
|
#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> whereCondition = new();
|
||||||
|
|
||||||
|
// Создаю массив значений
|
||||||
List<string> paramsValues = new();
|
List<string> paramsValues = new();
|
||||||
|
|
||||||
|
// Если заданы параметры where
|
||||||
if (where.Any())
|
if (where.Any())
|
||||||
{
|
{
|
||||||
|
// - то формирую массив where из where-запроса
|
||||||
whereCondition.AddRange(where.Select(static whereItem => $"{whereItem.Key}=@{whereItem.Key}"));
|
whereCondition.AddRange(where.Select(static whereItem => $"{whereItem.Key}=@{whereItem.Key}"));
|
||||||
|
// - и значения параметров
|
||||||
paramsValues.AddRange(where.Select(static whereItem => $"@{whereItem.Key}={whereItem.Value}"));
|
paramsValues.AddRange(where.Select(static whereItem => $"@{whereItem.Key}={whereItem.Value}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Если массив where параметров не пуст
|
||||||
if (whereCondition.Any())
|
if (whereCondition.Any())
|
||||||
|
// - то добавляю к запросу
|
||||||
sql += $" WHERE {string.Join(", ", whereCondition.ToArray())}";
|
sql += $" WHERE {string.Join(", ", whereCondition.ToArray())}";
|
||||||
|
|
||||||
|
// Если добавлена сортировка
|
||||||
if (orderBy != null)
|
if (orderBy != null)
|
||||||
|
// - то добавляю сортировку к запросу
|
||||||
sql += $" ORDER BY {orderBy}";
|
sql += $" ORDER BY {orderBy}";
|
||||||
|
|
||||||
|
// Если установлено запрашиваемое число элементов
|
||||||
|
if (limit > 0)
|
||||||
|
// - то вводим ограничение
|
||||||
|
sql += $" LIMIT {limit}";
|
||||||
|
|
||||||
|
// Осуществляю запрос и возвращаю результат
|
||||||
return await QueryAsync<T>(sql, paramsValues.ToArray());
|
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
|
#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();
|
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> 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();
|
public async Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||||
}}
|
}
|
@ -37,15 +37,38 @@ public interface IDbEngine
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Получение
|
#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
|
#endregion
|
||||||
|
|
||||||
#region Вычисление числа элементов в таблице
|
#region Вычисление числа элементов в таблице
|
||||||
|
/// <summary>
|
||||||
|
/// Вычисляет число строк в таблице <paramref name="table"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="table">Таблица</param>
|
||||||
|
/// <returns>Число строк в таблице <paramref name="table"/></returns>
|
||||||
Task<int> CountAsync (string table);
|
Task<int> CountAsync (string table);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Добавление строки в таблицу
|
#region Добавление строки в таблицу
|
||||||
|
Loading…
x
Reference in New Issue
Block a user