2010-04-26 12 views
6

Tengo este código simple pero muestra un error. No sé dónde me estoy equivocando. I muestra un error en la última línea ... "DeleteOnSubmit" linq_testDataContext db = new linq_testDataContext();Eliminar consulta en Linq

var remove = from aremove in db.logins 
     where aremove.username == userNameString && aremove.Password == pwdString 
     select aremove; 
db.logins.DeleteOnSubmit(remove); 

Respuesta

3

DeleteOnSubmit toma un solo objeto. Usted está pasando un IEnumerable<login> a él. Utilice DeleteAllOnSubmit vez, o seleccionar un único objeto de su colección resultante, así:

var remove = (from aremove in db.logins 
      where aremove.username == userNameString 
       && aremove.Password == pwdString 
      select aremove).FirstOrDefault(); 

if(remove != null) 
{ 
    db.logins.DeleteOnSubmit(remove); 
} 
+0

@philip ahora consulta está trabajando muy bien, pero los datos no se elimina de la tabla . todavía está allí ... ¿Cómo puedo solucionarlo? Gracias – Ani

+0

Ejecute el depurador y busque lo que está en esa variable 'remove'. Supongo que no hay ningún elemento dentro, por lo tanto, no se borra nada. –

+0

Por cierto: ¿por qué verificas la contraseña en tu consulta? Supongo que el nombre de usuario solo está disociado de todos los demás, ¿verdad? –

2

En lugar de:

db.logins.DeleteOnSubmit(remove); 

llamada DeleteAllOnSubmit(), así:

db.logins.DeleteAllOnSubmit(remove.ToList()); 

Asegúrese de llama al db.SubmitChanges() después. También puede usar .AsEnumerable(), ya sea o. Sin embargo, si se trata de una operación de eliminación de gran tamaño, es posible que desee pensar en pasar por alto LINQ en este caso.

+0

Gracias ... sí, no muestra ningún error, pero los datos todavía están en la base de datos ... no se borran ... Actualizo la base de datos ... Todavía hay datos allí ... ¿Cómo puedo arreglar esto? – Ani

+0

Buen punto Nick, yo daba por hecho llamar 'SubmitChanges' :) –

+0

Llamo a submitchanges pero aún no cambio en la base de datos ... He intentado ejecutar el depurador (F5) ... pero no muestra ningún error ... aquí está mi código ... var remove = from aremove en db.logins donde aremove.nombre de usuario == "admin" && aremove.Password == "kk" seleccione aremove; db.logins.DeleteAllOnSubmit (eliminar); db.SubmitChanges(); – Ani

4

le falta el bucle foreach para eliminar todas las entidades.

Uso, como a continuación

var remove = from aremove in db.logins 
    where aremove.username == userNameString && aremove.Password == pwdString 
    select aremove; 

y después de eso

foreach (var detail in remove) 
{ 
    db.logins.DeleteOnSubmit(detail); 
} 

y al fin

try 
{ 
    db.SubmitChanges(); 
} 
catch (Exception e) 
{ 
    // Provide for exceptions. 
} 

Hope esto le ayudará.

+0

Gracias @MukeshKumar –

0

Por buenas prácticas

private void DeleteCourse() 
     { 
      int id = Convert.ToInt32(txtSearch.Text); 
      CourseDemoDataContext cdContext = new CourseDemoDataContext(); 
      course courseobj = cdContext.courses.Single(courses => courses.COURSE_ID == id); 
      cdContext.courses.DeleteOnSubmit(courseobj); 
      cdContext.SubmitChanges(); 
     } 
0

intente utilizar el primer método(), algo como esto:

var remove = 
    (from aremove in db.logins where aremove.username == userNameString 
    && aremove.Password == pwdString select aremove).first(); 

db.logins.DeleteOnSubmit(remove);