Вы можете передать IPredicate
для удаления нескольких записей на основе условия (предложение WHERE) за один раз.
Если вы просто передадите пустое значение IPredicate
, все записи из таблицы будут удалены.
Следующая функция обрабатывает оба случая:
protected void DeleteBy(IPredicate where)
{//If 'where' is null, this method will delete all rows from the table.
if(where == null)
where = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() };//Send empty predicateGroup to delete all records.
var result = connection.Delete<TPoco>(predicate, ......);
}
В приведенном выше коде TPoco
- это ваш тип POCO, который сопоставлен с таблицей базы данных, о которой вы говорите.
Вы можетепостроить предикат примерно так:
var predicateGroup = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() };
if(!string.IsNullOrEmpty(filterValue))
predicateGroup.Predicates.Add(Predicates.Field<MyPoco>(x => x.MyProperty, Operator.Eq, PredicateGroup));
Транзакция - это другое.Вы можете поместить весь свой текущий код в транзакцию.Вы также можете поместить мой код в транзакцию.С моим кодом транзакция не имеет большого значения, хотя;хотя рекомендуется всегда использовать транзакции.
Про прохождение списка объектов я никак не вижу.Ниже приведены два метода расширения Dapper Extensions для удаления записи:
public static bool Delete<T>(this IDbConnection connection, object predicate, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;
public static bool Delete<T>(this IDbConnection connection, T entity, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;
Ни один из них не принимает список объектов.Один принимает предикат, а другой принимает один объект.