Laden...

Result in Liste zurückgeben

Erstellt von tom-cat vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.105 Views
T
tom-cat Themenstarter:in
77 Beiträge seit 2010
vor 13 Jahren
Result in Liste zurückgeben

verwendetes Datenbanksystem:MSSQL 2005 SP3

Hallo zusammen,

ich habe eine Klasse die mir Daten aus der Datenbank läd und mir ins Result quasi die Daten liefert, welche ich dann weiter verwende.
Leider bekomme ich das nicht so hin wie gewünscht.

Folgendes habe ich schon gemacht (funktioniert)


 public List<Data> GetLieferanten(string connString)
    {
        var result = new List<Data>();

        using (InvoiceClientEntities db = new InvoiceClientEntities(connString))
        {
            var x = from tab in db.Data
                    select tab;
            if (x.Count() > 0)
            result = x.ToList();
                
        }

        return result;
    }

Das liefert mir die gesamte Liste der Lieferanten aus der Tabelle Data zurück inkl. aller Spalten. Das möchte ich aber nicht bez. ich muss eig. noch eine Liste aufbauen, wo ich noch Spalten direkt mit in das Grid gebe.
Zweck des ganzen ist noch ein Button der im Grid liegt, welchen ich mit einem Hyperlink befülle.
Als normale Funktion klappt das ohne Probleme, jedoch nicht mit einer Klasse wie hier beschrieben.
Hier der Code den ich angefangen habe:

 public List<Data> GetLieferanten(string connString)
    {
        var result = new List<Data>();

        using (InvoiceClientEntities db = new InvoiceClientEntities(connString))
        {
            var x = from tab in db.Data
                    select tab;
            if (x.Count() > 0)
            foreach (var items in x)
                {
                    Services.Lists.InvoiceData l = new Services.Lists.InvoiceData();
                    l.ID = (int)items.ID;
                    l.iNumber = items.iNumber;
                    l.LName = items.LName;
                    l.PDFShowText = "PDF";
                    l.PDFShowNavUrl = "hier der Link dann der noch zusammengesetzt wird in einer anderen classe";
                    xlist.Add(l);
                }
            result = xlist.ToList();       
                
        }

        return result;
    }

Die Klasse InvoiceData ist eine normale Klasse wo einfach nur die Colums stehen mit {get; set;}

bei xlist.ToList() bekomme ich immer den Fehler:

Eine implizite Konvertierung vom Typ "System.Collections.Generic.List<Services.Lists.InvoiceData>" in "System.Collections.Generic.List<Infrastructure.Db.Data>" ist nicht möglich.

Jemand ne Idee ? Steh da etwas auf dem Schlauch

Gruß
Tom

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo tom-cat,

die Fehlermeldung sagt alles.
result ist vom Typ List<Data>
xlist.ToList() ist vom Typ List<InvoiceData>

edit: aber Achtung. Wenn du deine Methode des öfteren ausführst wird xlist immer und immer wieder gefüllt da es als globale Variable Instanzvariable definiert ist.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

T
tom-cat Themenstarter:in
77 Beiträge seit 2010
vor 13 Jahren

Dank dir für die schnelle Rückmeldung.

Wie würdest du denn die list befüllen ? Bräuchte da mal nen kleinen Anstoß 😃

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

Wie würdest du denn die list befüllen ? Bräuchte da mal nen kleinen Anstoß 😃

Was muro richtig erkennt hat ist dass du diese xlist ausserhalb der Methode definiert hast.
Damit werden bei jedem Methodenaufruf die Elemente hinten angehängt.
Beim ersten Mal ist das noch ok, aber nachher hast du die Dinger dann Doppelt und Dreifach.

D.h. Entweder du rufst einfach Clear auf bevor du die Liste wieder befüllst oder du erstellst sie jedes mal neu.

Zudem kannst du dir die Zeile


if (x.Count() > 0)

sparen, da die Foreach-Schleife ohnehin nix macht wenn kein Element drinnen ist.

Gruss
Michael

1.552 Beiträge seit 2010
vor 13 Jahren

Wie würdest du denn die list befüllen ?

  1. Wie oft rufst du die Methode auf?
  2. Wie oft ändert sich die Lieferantenanzahl?

I) Lieferantenanzahl ändert sich nie:
Lass es wie es ist und baue eine Abfrage ein dass die Liste nur einmal gefüllt wird.

II) Lieferantenanzahl ändert sich dauernd:
Deklariere xlist in der Methode (damit sie bei jedem Aufruf sicher neu erstellt wird) und mach es wie gehabt.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp