2012-02-29 32 views
9

Tengo una base de datos de deportes con una tabla groupmembers que tienen los campos ID, groupID y memberID. Obtengo el ID de miembro de un cuadro de texto llamado txtRemoveGroupMember y el groupID de una lista de casilla de verificación. Ahora quiero eliminar las filas que tienen tanto groupID como memberID. me han tratado este código:Borrando filas en una tabla con Linq a SQL

foreach(ListItem listItem in cblRemoveMemberFromGroup.Items) 
{ 
     int memberid = Convert.ToInt32(txtRemoveGroupMember.Text); 
     int groupid = Convert.ToInt32(listItem.Value); 

     var removeFromGroup = from gm in dataContext.GroupMembers 
      where (gm.memberID == memberid) && (gm.groupID == groupid) 
      select gm; 

     dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup); 
     dataContext.SubmitChanges(); 
} 

pero me sale este error: Error 7 Argumento 1: no se puede convertir de 'System.Linq.IQueryable' a 'GSI_side.GroupMember'

Y este error: Error 6 La mejor coincidencia de método sobrecargado para 'System.Data.Linq.Table.DeleteOnSubmit (GSI_side.GroupMember)' tiene algunos argumentos no válidos

Espero que alguien me ayude a resolver esto.

+0

DeleteOnSubmit requiere un objeto de tipo GroupMember y la consulta linq devuelve IQueryable. Es por eso que están obteniendo el error. Intenta usar removeFromGroup.ToList() en su lugar. – Dinesh

Respuesta

13

usted tiene que llamar .ToList()

var items = removeFromGroup.ToList(); 
foreach (var item in items) 
    dataContext.GroupMembers.DeleteOnSubmit(item); 

Para el lote elimina utilizo this, porque LINQ to SQL carga por primera vez toda la información que se va a borrar, luego lo hace el eliminaciones cada uno por cada uno .

https://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/

https://github.com/longday/LINQ-to-SQL-Batch-Updates-Deletes

+2

¡Muchas gracias! Eso funcionó perfectamente =) – Twistar

+0

Ver la respuesta de @ JeremyWiggins, hay un método DeleteAllOnSubmit(). –

+0

Estos enlaces están muertos ahora, ¿puede indicar una nueva ubicación o, preferiblemente, explicar lo que dicen? – Dan

9

removeFromGroup es todavía de tipo IQuerable.

Debe especificar un GroupMember real para eliminar.

Usted podría utilizar

GroupMember removeFromGroup = (from gm in dataContext.GroupMembers 
           where (gm.memberID == memberid) && (gm.groupID == groupid) 
           select gm).SingleOrDefault(); 


dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup); 
dataContext.SubmitChanges(); 

Alternativamente, si la consulta devuelve una colección (de lo que se ve, no va ya que está filtrando por memberId) que podría utilizar

List<GroupMember> removeFromGroup = (from gm in dataContext.GroupMembers 
            where (gm.memberID == memberid) && (gm.groupID == groupid) 
            select gm).ToList(); 


dataContext.GroupMembers.DeleteAllOnSubmit(removeFromGroup); 
dataContext.SubmitChanges(); 
4
var listToRemove=(from a in DB.Table 
      where a.Equals(id) 
      select a).ToList(); 

DB.Table.DeleteAllOnSubmit(listToRemove); 
DB.SubmitChanges(); 
Cuestiones relacionadas