Eliminar una lista usando Dapper

.net c# dapper

Pregunta

Usando Dapper o Dapper.SimpleCRUD , ¿cómo podría eliminar una lista de una tabla? Algo como:

    public static void DeleteList<T>(List<T> listToDelete)
    {
        using (var connection = OpenConnection())
        {
            connection.Delete<T>(listToDelete);
        }
    }

Pero cuando intento eso, obtengo ...

El miembro de tipo DataModel.MyTable no se puede usar como un valor de parámetro

¿Es la única opción para pasar en una cláusula WHERE?

Respuesta aceptada

No veo ningún método Dapper para lo que quieres lograr. Las únicas opciones son dos eliminaciones individuales y dos eliminaciones múltiples.

public static int Delete<T>(this IDbConnection connection, int Id)

public static int Delete<T>(this IDbConnection connection, T entityToDelete)

public static int DeleteList<T>(this IDbConnection connection, object whereConditions, IDbTransaction transaction = null, int? commandTimeout = null)

public static int DeleteList<T>(this IDbConnection connection, string conditions, object parameters = null, IDbTransaction transaction = null, int? commandTimeout = null)

Ambas eliminaciones requieren que se pasen las condiciones o una cláusula where. Ejemplos:

connection.DeleteList<User>(new { Age = 10 });
connection.DeleteList<User>("Where age > 20");
connection.DeleteList<User>("Where age > @Age", new {Age = 20});

Respuesta popular

Dapper no conoce tu entidad; no es como Entity Framework. Necesita ejecutar un Comando SQL o un Procedimiento de Tienda por su cuenta.

public static void DeleteList(List<int> idToDelete)
{
    using (IDbConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        foreach (int id in idToDelete)
        {
            conn.Execute(@"DELETE FROM [User] WHERE Id = @Id", new {Id = id});
        }
    }
}

O ejecuta un comando varias veces

public static void DeleteList(List<int> idToDelete)
{
    using (IDbConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        conn.Execute(@"DELETE FROM [User] WHERE Id = @Id",
            idToDelete.Select(x => new { Id = x }).ToArray());
    }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué