Linq: Ottenere un elenco di tutte le tabelle presenti in DataContext

Ho un DataContext (Linq to Sql) con oltre 100 le tabelle, è possibile ottenere un elenco di tutte le tabelle e le permette di dire che la stampa della console? Questa potrebbe essere una domanda stupida.

Grazie.

InformationsquelleAutor Sergey | 2009-04-09



5 Replies
  1. 29

    È molto più facile di quanto sopra e di riflessione necessaria. Linq to SQL è un Mapping di proprietà che è possibile utilizzare per ottenere un’enumerazione di tutte le tabelle.

    context.Mapping.GetTables();
    • in realtà, questo ti dà anche la vista
    • Questo sembra non dare “del Sistema.Dati.Linq.Tabella”s, ma di Sistema”.Dati.Linq.La mappatura.MetaTable”s
  2. 4

    È possibile farlo attraverso la riflessione. In sostanza, è possibile scorrere la proprietà in DataContext classe. Per ogni proprietà, controllare per vedere se la struttura generica del tipo di parametro è il TableAttribute attributo. Se è così, che la proprietà rappresenta una tabella:

    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);
            }
        }
    }
    • Veloce, ma un po ‘ più complesso quando il Mapping di proprietà è di destra là in Linq to SQL.
  3. 4
    dc= new myDataContext();
    var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList();
  4. 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);
            }
        }
    }
  5. 0

    per SP

    foreach (var sp in Mapping.ContextType.GetMembers().Where(w=> w.Name.ToLower().Contains("push")).GroupBy(g=>g.Name).Select(s=>s.First()))
    {
        sp.Name.Dump();
        sp.ToString().Replace("LINQPad.Return", "").Replace("System.Data.Linq.", "").Dump();
    }

    per le Tabelle

    foreach (var table in Mapping.GetTables().Where(t => t.TableName.ToLower().Contains("push")))
    {
        table.TableName.Dump();
    }

Lascia un commento