2012-02-29 17 views
9

Possiedo un database di sport con un gruppo di gruppi tabella che contiene i campi ID, groupID e memberID. Ricevo l'ID membro da una casella di testo denominata txtRemoveGroupMember e il groupID da una checkboxlist. Ora voglio cancellare le file che hanno sia groupID che memberID. Ho provato questo codice:Eliminazione di righe in una tabella con Linq su 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(); 
} 

ma ottengo questo errore: Errore 7 Argomento 1: non può convertire da 'System.Linq.IQueryable' a 'GSI_side.GroupMember'

E questo errore: Errore 6 La migliore corrispondenza del metodo sovraccarico per "System.Data.Linq.Table.DeleteOnSubmit (GSI_side.GroupMember)" ha alcuni argomenti non validi

Spero che qualcuno possa aiutarmi a capirlo!

+0

DeleteOnSubmit richiede un oggetto di tipo GroupMember e la query linq restituisce IQueryable. Ecco perché stanno ottenendo l'errore. Prova invece a rimuovere removeFromGroup.ToList(). – Dinesh

risposta

13

dovete chiamare ToList()

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

Per batch elimina uso this, perché LINQ to SQL primi carichi dell'intero dati che sta per essere cancellato, allora fa l'elimina ogni da ogni .

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

Grazie mille! Ciò ha funzionato perfettamente =) – Twistar

+0

Vedere la risposta di @ JeremyWiggins, esiste un metodo DeleteAllOnSubmit(). –

+0

Questi collegamenti sono morti ora, puoi indicare una nuova posizione o preferibilmente spiegare cosa dicono? – Dan

9

removeFromGroup è ancora di tipo IQuerable.

È necessario specificare un effettivo GroupMember da eliminare.

Si potrebbe utilizzare

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


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

In alternativa, se la query restituisce un insieme (dagli sguardi di esso, non sarà in quanto si sta filtrando dal memberId) si potrebbe usare

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(); 
Problemi correlati