LINQ to SQL -> Visual C#

0

Witam
Chciałbym usunąć pole z tabeli, które ma jakaś wpisane ID do editboxa.
Chciałbym to zrobić LINQ'iem, jednak napisałem parę wersji tych zapytań linqiem i nie chce mi to działać.
Ktoś orientuje się jak powinno się wykonywać usuwanie ?

Ja wymyśliłem coś takiego:

DataClassesDziennikDataContext db = new DataClassesDziennikDataContext();

db.Uczens.DeleteAllOnSubmit(db.Uczens.Single(p=> p.IdKlasy == (Int16.Parse(txtIdUcznia.Text))));
db.SubmitChanges();

Jednak dostaję błąd:
The type arguments for method 'System.Data.Linq.Table<Dziennik.Uczen>.DeleteAllOnSubmit<TSubEntity>(System.Collections.Generic.IEnumerable<TSubEntity>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Teraz próbowałem też tak:
int x = Int16.Parse(txtIdUcznia.Text);

        Uczen student = db.Uczens.Where(c => c.IdKlasy == x).Single();
        db.Uczens.DeleteAllOnSubmit(student);
        db.SubmitChanges();

Ale ten sam błąd co wyżej :-) Plz help !

Heh. w zapytaniu Linqa podawałem Id_klasy a nie ID_ucznia = chyba z przemęczenia :-). W każdym razie tak wygląda działające zapytanie:
 
       <code>     DataClassesDziennikDataContext db = new DataClassesDziennikDataContext();
            int x = Int16.Parse(txtIdUcznia.Text);
                
            Uczen student = db.Uczens.Where(c => c.IdUcznia == x).Single();
            db.Uczens.DeleteOnSubmit(student);
            db.SubmitChanges();
            MessageBox.Show("Uczen zostal usunięty");

Teraz chciałem się spytać czy macie może jakiś ciekawy pomysł, żeby program się nie wysypywał, gdy ktoś wpisze ID, którego nie ma w bazie ? Normalnie teraz się wykrzacza i pokazuje na Uczen student = db.Uczens.Where(c => c.IdUcznia == x).Single(); z błędem sequence has no elements.

0

bloki try catch ?:>

0

Ja wymyśliłem coś takiego = zliczanie przed insertem ile ID_ucznia jest w tabeli (wiadomo, że może być tylko jeden), jeśli jest więcej niż zero, czyli dane ID jest w tabeli to wykonuje się INSERT. Jeśli ktoś ma coś lepszego to piszcie.

int x = Int16.Parse(txtIdUcznia.Text);
            int IdCount = db.Uczens.Count(d => d.IdUcznia == x);

            if (IdCount > 0)
            {
                 Uczen student = db.Uczens.Where(c => c.IdUcznia == x).Single();
                 db.Uczens.DeleteOnSubmit(student);
                 db.SubmitChanges();
                 MessageBox.Show("Uczen zostal usunięty");
            }
       
            
        }
0

Może coś takego ?

if (db.Uczens.Any(d => d.IdUcznia == x))
            {
                 //...
            }
0

a po co 2 razy operowac na bazie (klasach) ?:>
torche nie optymalne... do przechwytywania wyjatkow sluza bloki try catch!!

0

Nie prościej zamiast Single użyć SingleOrDefault?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Uczen> uczniowie = new List<Uczen>();
            uczniowie.Add(new Uczen() { Id = 1, Name = "Adam" });
            uczniowie.Add(new Uczen() { Id = 2, Name = "Grzegorz" });
            uczniowie.Add(new Uczen() { Id = 3, Name = "Staszek" });

            int id = 1;
            Uczen uczen = uczniowie.SingleOrDefault(x => x.Id == id);
            Console.WriteLine(uczen);   //Adam

            id = 5;
            uczen = uczniowie.SingleOrDefault(x => x.Id == id);
            Console.WriteLine(uczen);   //nic

            Console.WriteLine("Koniec!");
            Console.ReadLine();
        }
    }

    class Uczen
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return this.Name;
        }
    }

}
HideYoshi napisał(a)

do przechwytywania wyjatkow sluza bloki try catch!!

Tu nie ma mowy o żadnych wyjątkach. Wyjątki stosuje się w przypadku sytuacje niespodziewanych, a coś takiego, jak podanie przez użytkownika niepoprawnego ID można przewidzieć (co zresztą autor przecież już zrobił).

1 użytkowników online, w tym zalogowanych: 0, gości: 1