Просто чтобы отвлечься от ответа Сэма, вот как я создал два вспомогательных метода, чтобы немного упростить поиск с помощью оператора LIKE.
Во-первых, при создании метода для генерации параметризованного запроса этот метод использует dynamic: , но создание строго типизированного универсального метода должно быть более желательным во многих случаях, когда вам нужна статическая типизация вместо динамической.
public static dynamic ParameterizedQuery(this IDbConnection connection, string sql, Dictionary<string, object> parametersDictionary)
{
if (string.IsNullOrEmpty(sql))
{
return null;
}
string missingParameters = string.Empty;
foreach (var item in parametersDictionary)
{
if (!sql.Contains(item.Key))
{
missingParameters += $"Missing parameter: {item.Key}";
}
}
if (!string.IsNullOrEmpty(missingParameters))
{
throw new ArgumentException($"Parameterized query failed. {missingParameters}");
}
var parameters = new DynamicParameters(parametersDictionary);
return connection.Query(sql, parameters);
}
Затем добавьте метод для создания поискового запроса Like, который будет работать с Dapper.
public static string Like(string searchTerm)
{
if (string.IsNullOrEmpty(searchTerm))
{
return null;
}
Func<string, string> encodeForLike = searchTerm => searchTerm.Replace("[", "[[]").Replace("%", "[%]");
return $"%{encodeForLike(searchTerm)}%";
}
Пример использования:
var sql = $"select * from products where ProductName like @ProdName";
var herringsInNorthwindDb = connection.ParameterizedQuery(sql, new Dictionary<string, object> { { "@ProdName", Like("sild") } });
foreach (var herring in herringsInNorthwindDb)
{
Console.WriteLine($"{herring.ProductName}");
}
И мы получаем наши образцы данных из базы данных Northwind:
![Пример данных](https:/ /i.stack.imgur.com/oMNMD.png)
Мне нравится этот подход, поскольку мы получаем вспомогательные методы расширения для выполнения повторяющейся работы.
person
Tore Aurstad
schedule
28.06.2021