C# 删除列表<;T>;衣冠楚楚

C# 删除列表<;T>;衣冠楚楚,c#,.net,dapper,C#,.net,Dapper,使用Dapper或,如何从表中删除列表。比如: public static void DeleteList<T>(List<T> listToDelete) { using (var connection = OpenConnection()) { connection.Delete<T>(listToDelete); } } public静态void Delet

使用Dapper或,如何从表中删除列表。比如:

    public static void DeleteList<T>(List<T> listToDelete)
    {
        using (var connection = OpenConnection())
        {
            connection.Delete<T>(listToDelete);
        }
    }
public静态void DeleteList(List listToDelete)
{
使用(var connection=OpenConnection())
{
connection.Delete(listToDelete);
}
}
但是当我尝试的时候,我得到

DataModel.MyTable类型的成员不能用作参数值


是传递WHERE子句的唯一选项吗?

我看不到任何适合您实现目标的简洁方法。唯一的选项是两次单次删除和两次多次删除

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)
publicstaticint-Delete(此IDbConnection,int-Id)
公共静态int Delete(此IDbConnection连接,T entityToDelete)
公共静态int DeleteList(此IDbConnection连接,对象whereConditions,IDbTransaction=null,int?commandTimeout=null)
公共静态int DeleteList(此IDbConnection连接,字符串条件,对象参数=null,IDbTransaction=null,int?commandTimeout=null)
两次删除都需要传递条件或where子句。示例:

connection.DeleteList<User>(new { Age = 10 });
connection.DeleteList<User>("Where age > 20");
connection.DeleteList<User>("Where age > @Age", new {Age = 20});
connection.DeleteList(新的{Age=10});
连接。删除列表(“其中年龄>20”);
connection.DeleteList(“Where age>@age”,new{age=20});

Dapper不知道您的实体;它不像实体框架。您需要自己执行SQL命令或存储过程

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});
        }
    }
}
publicstaticvoiddeletelist(List-idToDelete)
{
使用(IDbConnection conn=newSQLConnection(connString))
{
conn.Open();
foreach(idToDelete中的int id)
{
conn.Execute(@“从[User]删除,其中Id=@Id”,new{Id=Id});
}
}
}

publicstaticvoiddeletelist(List-idToDelete)
{
使用(IDbConnection conn=newSQLConnection(connString))
{
conn.Open();
conn.Execute(@“从[User]中删除,其中Id=@Id”,
Select(x=>new{Id=x}).ToArray();
}
}

不确定选择上述答案的原因。但Dapper开箱即用不支持列表功能。不要在我的答案中重新创建轮子,请参见:。。。就我的2c。

简易方法:

public void BulkDelete(IEnumerable<int> idList)
    {
        using (var connection = GetNewConnection())
        {
            connection.Execute("Delete FROM MY_TABLE WHERE Id in @idList", new { idList });
        }
    }
public void BulkDelete(IEnumerable idList)
{
使用(var connection=GetNewConnection())
{
Execute(“从MY_表中删除,@idList中的Id”,new{idList});
}
}

好的,是的,我也看到了。只是希望有人知道我可能错过的一个把戏
public void BulkDelete(IEnumerable<int> idList)
    {
        using (var connection = GetNewConnection())
        {
            connection.Execute("Delete FROM MY_TABLE WHERE Id in @idList", new { idList });
        }
    }