2009-11-26 55 views
16

Usando LINQ, ¿cómo puedo obtener los nombres de columna de una tabla? C# 3.0, 3.5 marcoLINQ: Obtener nombres de columna de tabla

+0

Reetiquetado a 'linq-to-sql', por favor edite su pregunta si se refería a algún otro tipo de" LINQ ". –

+0

Desafortunadamente, esta consulta se ejecuta dentro de LINQPad entonces, ¿cómo obtengo el contexto en LINQPad? –

Respuesta

5

supongo que te refieres mediante el uso de LINQ a SQL, en el que caso de mirada en la propiedad DataContext.Mapping. Eso es lo que uso.

Si no quiere decir eso, ¿puede explicar lo que está tratando de lograr?

+0

Quiero escribir un programa usando LINQPad (C#) que puede construir sentencias SQL insert fuera de curso para esto requiero los nombres de columna de las tablas. –

+5

podría aclarar esto un poco ... esto no es una gran respuesta. –

+1

Algunos ejemplos de uso serían geniales. La API de asignación es un poco intuitiva, por decir lo menos ... –

0

Iterar las propiedades de sus clases L2S con la reflexión

2

utilizan el método ExecuteQuery en el contexto de datos y ejecutar esta secuencia de comandos SQL:

var columnNames = ctx.ExecuteQuery<string> 
    ("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('your table name');"); 

Esto le da una IEnumerable<string> con todos los nombres de las columnas de esa tabla que ha especificado.

Por supuesto, si lo desea y necesita, siempre puede recuperar más información (por ejemplo, tipo de datos, longitud máxima) de la vista de catálogo sys.columns en SQL Server.

0

Si está hablando de obtener las columnas para una tabla mapeada, consulte this answer para ver cómo llegar a los atributos de la columna. Desde allí puede obtener los nombres de columna, tipos, etc.

6

Me encontré con esta pregunta buscando lo mismo y no vi una muy buena respuesta aquí. Esto es lo que se me ocurrió. Simplemente colóquelo en LINQPad en el modo de expresión C#.

from t in typeof(UserQuery).GetProperties() 
where t.Name == "Customers" 
from c in t.GetValue(this,null).GetType().GetGenericArguments()[0].GetFields() 
select c.Name 

Modifique como mejor le parezca.

17

tal vez es demasiado tarde, pero, he resuelto este problema mediante el código

var db = new DataContex(); 
var columnNames = db.Mapping.MappingSource 
         .GetModel(typeof(DataContex)) 
         .GetMetaType(typeof(_tablename)) 
         .DataMembers; 
+1

Gracias, me acabas de ahorrar un montón de tiempo. Esto es mejor que la respuesta aceptada porque muestra cómo usar la propiedad DataContext.Mapping. –

+3

Para VB.Net use 'GetType (DataContext)' en lugar de 'typeof (DataContext)'. – Zarepheth

2

He utilizado este código en LINQPad

from t in typeof(table_name).GetFields() select t.Name 
+0

Tenga en cuenta que es la versión no simplificada del nombre de la tabla. –

15

El código siguiente se trabajó a partir devuelve todos los nombres de las columnas de la tabla

var columnnames = from t in typeof(table_name).GetProperties() select t.Name 
+2

No estoy seguro de por qué esto no fue votado, es la respuesta más elegante. Aquí está la sintaxis lambda equivalente: var columnnames = typeof (table_name) .GetProperties(). Select (t => t.Name); – draconis

+0

Quizás esto no haya sido votado, ya que no solo obtiene las columnas sino también propiedades adicionales. Por lo general, es una clase parcial con extensibilidad en mente después de todo. – mbx

0
  var query = from x in DataBase.Table_Name 
         select x.Column_Name; 
0

sp_help 'TableName'

Una opción para una ventana LINQPad SQL para MS SQL Server

0

En LINQPad:

TableNames.Take (1) funciona.

Es rápido de escribir. (Aunque esté en un mundo ideal, sería mejor no seleccionar ninguna fila.)

Tenga en cuenta que es la forma pluralizada de TableName. También puede hacer Take (0) y mirar la pestaña de resultados de SQL.

Cuestiones relacionadas