2011-10-05 11 views
9

Estoy usando LINQPad y me gustaría saber los detalles del esquema de una tabla.LINQ: Obtener detalles de la tabla

sé que lo hago uso de SQL:

SELECT column_name,* 
FROM information_schema.columns 
WHERE table_name = '{table_name}' 
ORDER BY ordinal_position 

¿Cómo puedo hacer esto usando LINQ?

+0

Sé que linq pad lo hace. Tal vez podrías reflexionar sobre el ejecutable linq? Resharper tiene "dotPeek", que es gratis. – Crisfole

+0

@Cpfohl: ¿Cómo hago el reflejo? –

+0

Creo que las siguientes respuestas son más que suficientes. Para ver realmente la fuente, deberías descargar dotPeek desde el sitio web de Reflector y ejecutarlo en el exe. – Crisfole

Respuesta

6

Los contextos de LINQ a SQL tienen una propiedad Mapping que puede usar para este tipo de cosas. Una consulta como la que ya ha proporcionado podría ser algo como esto:

from t in context.Mapping.GetTables() 
where t.TableName == "[table_name]" 
from c in t.RowType.DataMembers 
orderby c.Ordinal 
select new {columnName = c.Name, columnInfo = c} 

Ver this answer para más detalles.

+0

Obtengo 'IEnumerable <> (0 artículos)' –

+0

@inquisitive_one: supongo que se debe al nombre de su tabla. Debe estar entre corchetes, como puede ver en el ejemplo dado. Entonces una tabla llamada 'person_sites' necesitaría decir' "[person_sites]" '. – StriplingWarrior

+0

Todavía obtengo el mismo resultado. Lo hago como una "Expresión de C#" en LINQPad. –

4
MetaTable t = MyDataContext.Mapping.GetTables().Where(
    i => i.TableName == "TABLENAME").SingleOrDefault(); 
PropertyInfo[] fields = t.RowType.InheritanceRoot.GetType().GetProperties(); 

'fields' contendrá los nombres y tipos de las columnas.

+0

obtengo 'El tipo de nombre del espacio de nombres "MetaTable" no se pudo encontrar. –

+0

[System.Data.Linq] (http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.metatable.aspx) –

+0

Aún recibo el mismo mensaje. Agregué "System.Data.Linq.dll" a las referencias adicionales de la consulta. Estoy usando "Declaración (es) de C#" en LINQPad. –

0

En LINQ to SQL, podría intentar incluir estas vistas en el modelo. Si eso no funciona, puede crear un procedimiento almacenado que recupere la información, luego LINQ to SQL correlaciona el procedimiento almacenado y lo ejecuta como una función.

Cuestiones relacionadas