我在 sql server 中有一个数据库,其中只有很少的表。
我需要填充一个列表框,其中包含来自数据库的表名列表,其中包含指定的列名 说“特别”。
我试过类似的东西..
使用 (SqlConnection 连接 = new SqlConnection(connectionString))
{
connection.Open();
List tables = new List();
DataTable dt = connection.GetSchema("表");
foreach(dt.Rows 中的 DataRow 行)
{
字符串表名=(字符串)行[2];
表。添加(表名);
}
listbox1.ItemsSource = 表格;
connection.Close();
}
但它显示了数据库中存在的所有表..
但我只想要那些在列表中有特定列的表...
请给我建议方法...:)
最佳答案
您可以使用此 linq 查询(现已测试):
List<string> tNames= new List<string>(); // fill it with some table names
List<string> columnNames = new List<string>() { "special" };
// ...
IEnumerable<DataRow> tableRows = con.GetSchema("Tables").AsEnumerable()
.Where(r => tNames.Contains(r.Field<string>("TABLE_NAME"), StringComparer.OrdinalIgnoreCase));
foreach (DataRow tableRow in tableRows)
{
String database = tableRow.Field<String>("TABLE_CATALOG");
String schema = tableRow.Field<String>("TABLE_SCHEMA");
String tableName = tableRow.Field<String>("TABLE_NAME");
String tableType = tableRow.Field<String>("TABLE_TYPE");
IEnumerable<DataRow> columns = con.GetSchema("Columns", new[] { database, null, tableName }).AsEnumerable()
.Where(r => columnNames.Contains(r.Field<string>("COLUMN_NAME"), StringComparer.OrdinalIgnoreCase));
if (columns.Any())
{
tables.Add(tableName);
}
}
关于c# - 在 C# 中通过 sql 填充具有指定列的所有表名的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913024/