2014-08-29 62 views
0

我有组合框在我的数据库中的所有表的列表:获取表名LINQtoSQL

using(DataContext db = new DataContext()) 
{ 
    cmbbx_tables.DataSource = db.Mapping.GetTables().Select(q=>new {q.TableName, q.RowType}).ToArray(); 
    cmbbx_tables.DisplayMember = "TableName"; 
    cmbbx_tables.ValueMember = "RowType";   
} 

SelectionChangeCommitted事件我想选择的表的名称:

private void cmbbx_tables_SelectionChangeCommitted(object sender, EventArgs e) 
{ 
    using(DataContext db = new DataContext()) 
    { 
     String table = db.Mapping.GetTable((???)cmbbx_tables.SelectedValue).TableName;     
    } 
} 

如何我应该输入cast cmbbx_tables.SelectedValue?

+0

如果你最终需要字符串类型,那么为什么你甚至类型转换?只需'cmbbx_tables.SelectedValue'就可以完成这项工作,不是吗? IOW - 'String table = cmbbx_tables.SelectedValue;' – joym8 2014-08-29 19:15:56

+0

不可以。组合框ValueMember是'RowType' – koryakinp 2014-08-29 19:23:29

+0

不确定您的意思。从你的代码中'String table = ...'和你的问题“我想得到所选表的名字”似乎'cmbbx_tables.SelectedValue.ToString()'将完成这项工作。 – joym8 2014-08-29 19:35:16

回答

0

的解决方案是:

String name = db.Mapping.GetTable((cmbbx_tables.SelectedValue as System.Data.Linq.Mapping.MetaType).Type).TableName; 
+0

仍然不确定为什么你要经历在你的上下文中调用GetTable的麻烦,类型转换它,然后调用TableName ,当它通过'cmbbx_tables.SelectedValue'或者'cmbbx_tables.SelectedItem.Text'在你的腿上以字符串形式出现时, – joym8 2014-08-29 19:56:23