2009-05-26 173 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属性的东西都是一列。让我知道如果你需要一个样本...