代码之家  ›  专栏  ›  技术社区  ›  Kenny Mann

带列枚举的Linq表枚举

  •  0
  • Kenny Mann  · 技术社区  · 15 年前

    如何获取所有表的列表并使用该列表枚举列? 我找到了描述其中一个或另一个的帖子,但不是两者都有。

    我的最终结果是,我希望生成一个静态类,其中包含每个表中所有列的名称,这样我就可以,例如:

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

    我正在使用 this 方法,这意味着我必须在列表中手动创建表。

    我有一个单独的命令行项目,它手动生成somenamespace.sometable类,并将生成的类文件添加到项目中。

    理想情况下,如果我可以通过每个表的前臂循环并执行类似的操作:

    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()之类的事情。亚音速有这个。

    决赛: 谢谢大家。都是很好的答案,引导我找到答案。你们这些家伙!

    4 回复  |  直到 15 年前
        1
  •  1
  •   Robert Harvey    15 年前

    纳扎德,

    这就是你要找的吗?

    Linq to SQL技巧:获取所有表[和列]名称: http://blogs.msdn.com/jomo_fisher/archive/2007/07/30/linq-to-sql-trick-get-all-table-names.aspx

        2
  •  0
  •   Robert Harvey    15 年前

    你所描述的基本上是 ORM

    LinqtoSQL是一个ORM,它将为您创建包含您描述的信息的原型C类。它对您所演示的数据绑定类型有很好的支持。

        3
  •  0
  •   Jeremy    15 年前

    我想你在找 this .

    DataContext.Mapping.GetTable(yourTable).RowType.DataMemebers()
    
        4
  •  0
  •   BFree    15 年前

    我可以想出两种方法来做到这一点。

    a)使用SMO获取数据库中的所有表/列。您需要参考:

    Microsoft.sqlserver.connectioninfo连接信息

    Microsoft.sqlserver.management.sdk.sfc文件

    微软.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 to SQL生成的数据类对程序集进行反射。任何具有表属性的内容都是表,而任何具有列属性的内容都是列。如果你需要样品,请告诉我…