Announcement

Collapse
No announcement yet.

Linq-to-dataset mit Unterabfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Linq-to-dataset mit Unterabfrage

    Hallo,

    ich versuche eine SQL-Abfrage nach Linq zu übersetzen.

    aus
    Code:
    SELECT     Artikelnummer
    FROM         Tabelle
    WHERE     (Artikelnummer NOT IN
                              (SELECT     Ressourcenummer
                                FROM          Tabelle AS Tabelle_1))

    ist geworden:
    [highlight=c#] var q2 = from t2 in this.DataSet.Tabelle
    where t2.Artikelnummer =
    (from t1 in this.DataSet.Tabelle
    select t1.Ressourcenummer)
    select t2.Artikelnummer;[/highlight]


    was aber nicht funktioniert.
    (Eine implizite Konvertierung vom Typ "System.Data.EnumerableRowCollection<string>" in "string" ist nicht möglich.)


    Geht das überhaupt mit Linq?


    Mit Gruß und Dank,
    Markus Blick
    Zuletzt editiert von EspelTel; 01.10.2009, 06:16.

  • #2
    Hallo,

    ich würde entweder LINQ to SQL verwenden oder ADO.net (DataSet).

    Sonst kannst du dir über die Erweiterungsmethoden Any, ... helfen.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      danke für die Tipps. Ich denke ich gehe wieder Richtung DataSet.


      Angefangen hat alles mit dem Wunsch, die Zusammensetzung einer Maschine aus Baugruppen , Unterbaugruppen, Einzelteilen in einer TreeView abzubilden.

      Unser ERP-System speichert dies in einer SQL-Tabelle mit "Vater" und "Kind"-Spalten für die Artikelnummern. (jede Baugruppe hat auch eine eindeutige Artikelnummer).

      Bisher lasse ich mir die einzelnen TreeView-Ebenen als DataTables ins Dataset laden. (über TableAdapter.Fill-Methoden mit Parametern )
      Das TeeView wird dann über For-Schleifen gefüllt.


      Nun ist das Ganze natürlich alles andere als flott.



      Meine Überlegung ist:
      • mit einem Tableadapter.Fill() - Aufruf sind alle retevanten Daten im DataSet und damit im Arbeitsspeicher.
      • Jetzt muß ich nur die richtigen .Net-"Werkzeuge" finden um mir den TreeView-Konstrukt zusammenzubauen.

      so versuche ich halt jetzt mit DataViews, Linq-to-Dataset, List<> usw ein vernünftiges Ergebniss zu bekommen.

      Ich melde mich wieder. (wenns klappt ;-) )
      Gruß
      Markus

      Comment


      • #4
        Ich habe das Ganze in mehrere Schritte zerlegt.

        1. eine List<string> ohneVäter für die erste Ebene
        2. diese mit LinQ to Dataset aus der Detailtabelle "ergänzen" und dem Treeview zufügen.
        [highlight=c#] foreach (string element in ohneVäter)
        {
        var q = from t in this.Dataset.KHKArtikel
        where t.Artikelnummer == element
        select t.Bezeichnung1;

        // Artikelnummer und Bezeichnung
        string zeile = element + trennzeichen + q.First();

        TreeNode knoten = new TreeNode (zeile); // knoten wird erzeugt
        this.treeView1.Nodes.Add(knoten); // und angefügt

        // alle Unterkinder auch
        // ist eine rekursive Methode, eventuell zeitlich versetzt anwenden
        kontenHinzufügen(knoten);
        }
        [/highlight]

        Das fertige Treeview braucht zum Zeichnen 15sec hat dann aber auch ca 13.000 Knoten.

        Ich werde das etwas schachteln, also Unterknoten erst erzeugen wenn der Knoten expandiert wird. (auf "+" geklick)

        Gruß
        Markus

        Comment

        Working...
        X