Autor Beitrag
Habak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 15.02.11 18:48 
Guten Abend,

ich habe mehrere Tabellen in einem DataContext.
Nun würde ich gerne über eine Variable auf die jeweils gewünschte Tabelle zugreifen.

Ohne eine "Variabilität" lässt sich mit folgenden Zeilen die Anzahl der Datensätze aus der Tabelle "010000" ermitteln:

ausblenden C#-Quelltext
1:
2:
3:
DatenDataContext Datenbank = new DatenDataContext(DBPfad);
var Daten = Datenbank.GetTable<_010000>(); //die Tabelle heisst "010000"
int Anzahl = Daten.Count();


Wie lässt sich nun die verwendete Tabelle als Variable verwenden?

Mit:

ausblenden C#-Quelltext
1:
2:
3:
4:
DatenDataContext Datenbank = new DatenDataContext(DBPfad);
var test = "_010000";
var Daten = Datenbank.GetTable<test>();
int Anzahl = Daten.Count();


funktioniert es leider nicht.

Für eine Lösung wäre bedanke ich mich schon im voraus.

Gruß

Habak

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 15.02.11 19:20 
Ich wüsste nicht, dass der Tabellenname irgendwo in Linq to SQL eine Rolle spielt oder überhaupt auftaucht. Wenn du den Entity-Typ der Tabelle kennst, kannst du die Überladung von GetTable benutzen, ansonsten musst du wohl in deiner Erklärung etwas weiter ausholen.

_________________
>λ=
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 15.02.11 19:40 
Hi Habak,
habe gerade mal was ausprobiert. Du kannst über das Mapping des Contextes die MetaTable bekommen, darüber den Typ der Row und schließlich die Tabelle. Lange Rede, kurze Ausführung:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
using (DataContext ctx = new DataContext())
{
  var metaTable = ctx.Mapping.GetTables().FirstOrDefault(t => t.TableName.Equals("dbo.Patient"));
  if (metaTable != null)
  {
    var patientTable = ctx.GetTable(metaTable.RowType.Type);  
    if (patientTable != null)
    {
      //do something
    }
  }
}
Habe es hier mal als Beispiel mit 'ner Patiententabelle gemacht. An der Stelle sei gesagt, dass Du als TableName den ganzen Namen (also Schema der Tabelle + Name) angeben musst! Auch wenn ich das Vorhaben, eine Tabelle über einen String zu identifizieren, nicht so ganz toll finde. Aber wenn Du es unbedingt brauchst.
LG und schönen Abend, Marko
Habak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 16.02.11 15:23 
Hallo Zusammen,

warum ich den Tabellennamen benötige ist kurz erklärt.
Ich habe einen Algorithmus der eine baumförmige Struktur besitzt. D.h. an einem Knoten gibt es mehrere Unterknoten usw..
Je Knoten gibt es eine Tabelle, die die spezifischen Eigenschaften beschreibt. Aus diesen wird dann auch der komplette Form-Inhalt automatisch generiert.
U.a. auch Buttons, mit denen eine Auswahl getätigt wird.
Je nach Auswahl wird der Tabellenname ermittelt, der dann für die neue Darstellung die notwendigen Daten notwendig ist.
Da ich einen recht großen "Baum" habe, der auch einfach erweiterbar sein muss, wäre eine starre Programmierung mit Namen sehr aufwendig und unübersichtlich.

Gruß

Habak
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 16.02.11 15:50 
Das erklärt für mich nicht, warum du über die Tabellennamen gehst und nicht auf der C#-Abstraktionsebene bleibst, indem du beispielsweise die System.Types der einzelnen Entity-Klassen benutzt (könnte vielleicht auch in Richtung Dependency Injection gehen?). Es scheinen ja nicht zur Laufzeit einfach neue Tabellen hinzuzukommen, sonst würdest du wohl überhaupt nicht auf Linq to SQL setzen.

_________________
>λ=
Habak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 16.02.11 16:16 
Hallo Kha,

nein es werden zu Laufzeit keine neuen Tabellen erstellt.
Leider ist mir Deine Antwort eine Sphäre zu hoch.
Trotzdem Danke für den Versuch.

Gruß

Habak