2010-04-26 16 views
6

Mam ten prosty kod, ale pokazuje błąd. Nie wiem, gdzie idę źle. Pokazuje błąd w ostatnim wierszu .. "DeleteOnSubmit" linq_testDataContext db = new linq_testDataContext();Usuń zapytanie w Linq

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

Odpowiedz

3

DeleteOnSubmit zajmuje pojedynczy obiekt. Przekazujesz mu numer IEnumerable<login>. Użyj DeleteAllOnSubmit zamiast, lub wybrać jeden obiekt z wynikającą kolekcji, podobnie jak to:

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 teraz kwerenda działa poprawnie, ale dane nie są usuwane z tabeli . wciąż tam jest ... jak to naprawić. Dzięki – Ani

+0

Uruchom debugger i zobacz, co jest w tej zmiennej 'remove'. Chyba nie ma w nim elementu, dlatego nic nie jest usuwane. –

+0

Przy okazji: dlaczego sprawdzasz hasło w zapytaniu? Domyślam się, że sama nazwa użytkownika jest rozłączna ze wszystkimi innymi, prawda? –

2

zamiast:

db.logins.DeleteOnSubmit(remove); 

połączenia DeleteAllOnSubmit(), tak:

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

Upewnij się, następnie zadzwoń pod numer db.SubmitChanges(). Możesz użyć również .AsEnumerable(), albo lub. Jeśli jest to duża operacja usuwania, możesz pomyśleć o pominięciu LINQ w tym przypadku.

+0

Dzięki ... tak, to nie pokazuje żadnego błędu, ale dane wciąż znajdują się w bazie danych ... ich nie usunięto ... Odświeżam bazę danych .. dane wciąż tam są ... jak mogę to naprawić – Ani

+0

Dobra uwaga Nick, I wziął za pewnik, aby zadzwonić 'SubmitChanges' :) –

+0

Wezwania submitchanges, ale nadal bez zmian w bazie danych ... Próbowałem uruchomić debugger (F5) ... ale pokazuje brak błędu ... Oto mój kod ... var remove = od aremove w db.logins gdzie aremove.username == "admin" && aremove.Password == "kk" select aremove; db.logins.DeleteAllOnSubmit (remove); db.SubmitChanges(); – Ani

4

brakuje pętli foreach, aby usunąć wszystkie encje.

Użyj jak poniżej

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

i po tej

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

i wreszcie

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

nadzieję, że to pomoże.

+0

Dzięki @MukeshKumar –

0

Dla dobrych praktyk

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

spróbuj najpierw stosując metodę() coś takiego:

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

db.logins.DeleteOnSubmit(remove); 
Powiązane problemy