Llene una list con todos los nombres de tabla que tiene columnas especificadas a través de sql en c #

Tengo una database en el server SQL que tiene pocas tablas.

Necesito llenar un listbox que contiene una list de nombres de tablas de la database que contiene un nombre de columna especificado, por ejemplo, 'especial'.

He intentado algo como …

 using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); List<string> tables = new List<string>(); DataTable dt = connection.GetSchema("Tables"); foreach (DataRow row in dt.Rows) { string tablename = (string)row[2]; tables.Add(tablename); } listbox1.ItemsSource = tables; connection.Close(); } 

pero muestra todas las tablas presentes en la database …

pero solo quiero esa tabla que tiene columnas específicas en una list …

Amablemente sugiéreme el path … 🙂

Puede usar esta consulta linq (ahora probada):

 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); } } 

En mi humilde opinión, simplemente debe consultar la tabla INFORMATION_SCHEMA.COLUMNS en lugar de intentar filtrar el esquema devuelto. Primero, recuperar el esquema del agujero para eliminar la mayoría de los datos es totalmente ineficaz.

 SELECT c.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.COLUMN_NAME = 'YourLovelyColumnName' 

Suponiendo que está trabajando en SQL Server:

 IF COL_LENGTH('table_name','column_name') IS NOT NULL BEGIN /*Column exists */ END 

Ver más:

Cómo comprobar si existe una columna en la tabla de SQL Server