2009-04-09 8 views

Respuesta

28

Es mucho más fácil que el anterior y no requiere reflexión. Linq to SQL tiene una propiedad Mapeo que puede usar para obtener una enumeración de todas las tablas.

context.Mapping.GetTables(); 
+0

Bien, no sabía de eso. –

+0

whooo hoo ¡eso es aún mejor! – Sergey

+0

Sí, sigo encontrando cosas así yo mismo. Siempre es divertido pasar uno en :). –

4

Puede hacerlo a través de la reflexión. Básicamente, iteras sobre las propiedades en tu clase DataContext. Para cada propiedad, verifique si el tipo de parámetro genérico de esa propiedad tiene el atributo TableAttribute. Si es así, esa propiedad representa una tabla:

using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
+0

Maldita sea! Escribes demasiado rápido: P – SirDemon

+0

@SirDemon en realidad obtuve la respuesta equivocada, la eliminé, probé la respuesta correcta en Visual Studio, la eliminé y la revisé :) –

+0

jaja, muchas gracias, ¡eso fue rápido! – Sergey

3
dc= new myDataContext(); 
var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList(); 
1
using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
Cuestiones relacionadas