Само за да се отклоня от отговора на Сам, ето как създадох два помощни метода, за да направя търсенето малко по-лесно с помощта на оператора LIKE.
Първо, създаване на метод за генериране на параметризирана заявка, този метод използва динамично:, но създаването на строго типизиран общ метод трябва да е по-желателно в много случаи, когато искате статично въвеждане вместо динамично.
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);
}
След това добавяне на метод за създаване на термин за търсене на харесване, който ще работи с 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 DB:
Харесвам този подход, тъй като получаваме помощни методи за разширение, за да извършваме повтаряща се работа.
person
Tore Aurstad
schedule
28.06.2021