2009-05-26 7 views
0

Wie erhalten Sie eine Liste aller Tabellen und verwenden Sie diese Liste zum Aufzählen der Spalten? Ich habe Beiträge gefunden, die das eine oder das andere beschreiben, aber nicht beides.LINQ Tabellenaufzählung mit Spaltenaufzählung

Mein Netto-Ergebnis ist ich eine statische Klasse erstellt werden soll, die Namen aller Spalten in jeder Tabelle enthält so konnte ich zum Beispiel tun:

comboBoxFoo.DisplayMember = SomeNamespace.SomeTable.SomeDisplayColumnName; 
comboBoxFoo.ValueMember = SomeNamespace.SomeTable.SomeIDColumnName; 
comboBoxFoo.DataSource = dingo; 

ich derzeit this Methode verwendet, die Während es funktioniert, bedeutet das, dass ich meine Tabellen manuell in einer Liste erstellen muss.

Ich habe ein separates Befehlszeilenprojekt, das die SomeNameSpace.SomeTable-Klasse manuell generiert, und ich füge die generierte Klassendatei in das Projekt ein.

Idealerweise, wenn ich könnte Schleife durch über eine foreach von Tabellen und etwas tun, wie folgt aus:

foreach(var table in someTableNumerationMethodForAGivenContext()) 
{ 
    var columnList = databaseContext.ColumnNames<someTable>(); 
    foreach(var columnData in columnList) 
    { 
     DoJazz(columnData.Name); 
    } 
} 

Gibt es einen besseren Weg, um dieses andere zu tun, als manuell die databaseContext.ColumnNames zu tun haben()?

Bearbeiten 1: Wir verwenden LinqToSQL. Der Wechsel zu ADO.NET ist auch eine Option auf dem Tisch, aber im Moment haben wir keine dringende Notwendigkeit dazu.

Edit 2: Ich weiß, dass L2S tutbinding, aber was ich bin, ist eine Liste der Spaltennamen als Zeichenfolgen aus einer Tabelle. L2S bietet das nicht an oder es ist nicht auf meiner Seite ersichtlich. Ich möchte etwas tun wie: SomeTable.SomeColumn.ToString() oder etwas. SubSonic hat das.

Finale: Danke an alle. Alle sind sehr gute Antworten und führen mich zu der Antwort. Ihr Jungs rockt!

Antwort

0

Was Sie beschreiben, ist im Wesentlichen ein ORM

Linq to SQL ist ein ORM, die # Prototyp c Klassen für Sie erstellen, die die Informationen, die Sie enthalten beschreiben. Es bietet eine hervorragende Unterstützung für die Art der Datenbindung, die Sie veranschaulicht haben.

+0

Wir verwenden Linq zu SQL, aber ich habe keine Ahnung, wie die Spaltennamen sind Strings. Irgendwelche Links zu bieten, damit ich lesen kann? Ich fühle mich, als würde ich etwas völlig Offensichtliches vermissen. –

0

Ich glaube, Sie für this suchen.

DataContext.Mapping.GetTable(yourTable).RowType.DataMemebers() 
0

Ich kann mir zwei Möglichkeiten vorstellen, dies zu tun.

A) Verwenden Sie SMO, um alle Tabellen/Spalten in einer Datenbank abzurufen. Sie müssen Referenz:

Microsoft.SqlServer.ConnectionInfo

Microsoft.SqlServer.Management.Sdk.Sfc

Microsoft.SqlServer.Smo

Dann können Sie etwas tun:

 ServerConnection connection = new ServerConnection("."); 
     Server server = new Server(connection); 
     Database db = server.Databases["Northwind"]; 
     foreach (Table table in db.Tables) 
     { 
      foreach (Column column in table.Columns) 
      { 
       Console.WriteLine("Table: {0}, Column: {1}",table.Name,column.Name); 
      } 
     } 
    } 

B) Verwenden Reflexion Ihre Montage zu reflektieren über den dataclasses von Linq zu Sql generiert. Alles mit einem Tabellenattribut ist eine Tabelle, und alles mit einem Spaltenattribut ist eine Spalte. Lassen Sie mich wissen, wenn Sie ein Beispiel benötigen ...