2009-05-26 259 views
0

如何獲取所有表的列表並使用該列表枚舉列? 我發現了描述其中一個或另一個的帖子,但不是兩個。使用列枚舉的LINQ表枚舉

我的淨結果是我想生成包含每個表中的所有列的名稱,以便我可以,例如靜態類,這樣做:

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

我目前使用this方法,而它的工作原理,這意味着我必須手動創建我的表在列表中。

我有一個單獨的命令行項目,它會手動生成SomeNameSpace.SomeTable類,並將生成的類文件添加到項目中。

理想的情況下,如果我可以遍歷通過表格的一個foreach,做這樣的事情:

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

是否有更好的方法來做到這一點以外手動要做databaseContext.ColumnNames()?

編輯1: 我們正在使用LinqToSQL。移動到ADO.NET也是一個選項,但目前我們沒有迫切的需要。

編輯2: 我知道L2S做數據綁定,但我後來得到的列名稱作爲字符串從一個表中。 L2S不提供這個,或者在我這邊並不明顯。 我想做類似於:SomeTable.SomeColumn.ToString()或其他。 SubSonic有這個。

Final: 謝謝大家。所有這些都是非常好的答案,並讓我找到答案。你們好棒!

回答

0

你所描述本質上是一個ORM

LINQ到SQL的是,會爲你包含你所描述的信息創建原型C#類的ORM。它對你所說明的那種數據綁定有很好的支持。

+0

我們正在使用Linq to SQL,但我不知道如何引用列名是字符串。任何鏈接提供,所以我可以讀取?我覺得我錯過了一些完全明顯的東西。 – 2009-05-26 15:22:03

0

我認爲你正在尋找this

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

我可以想到兩種方法來做到這一點。

A)使用SMO獲取數據庫中的所有表/列。您需要引用:

Microsoft.SqlServer.ConnectionInfo

Microsoft.SqlServer.Management.Sdk.Sfc

Microsoft.SqlServer。SMO

然後,你可以做這樣的事情:

 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)使用反射來反映過來與LINQ的生成SQL中的數據類的組件。具有Table屬性的任何東西都是一個表,任何具有Column屬性的東西都是一列。讓我知道如果你需要一個樣本...