2017-08-30 40 views
1

使用Dapper或Dapper.SimpleCRUD如何从表中删除列表。喜欢的东西:使用Dapper删除列表<T>使用Dapper

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

但是当我尝试,我得到...

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

是国内唯一选项传递一个WHERE子句?

回答

2

我没有看到任何你想达到的Dapper方法。唯一的选择是两次单次删除和两次多次删除。

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) 

这两种删除都要求您传递条件或where子句。示例:

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

好的,是的,这就是我所看到的。只是希望有人知道我可能错过的一个窍门(或者其他) –

2

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}); 
     } 
    } 
} 

或者Execute a Command multiple times

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()); 
    } 
}