Linq: получить список всех таблиц в DataContext - PullRequest
7 голосов
/ 10 апреля 2009

У меня есть DataContext (Linq to Sql) с более чем 100 таблицами, возможно ли получить список всех этих таблиц и, скажем, распечатать их на консоли? Это может быть глупый вопрос.

Спасибо.

Ответы [ 5 ]

29 голосов
/ 10 апреля 2009

Это намного проще, чем выше, и не требует отражения. В Linq to SQL есть свойство Mapping, которое можно использовать для получения перечисления всех таблиц.

context.Mapping.GetTables();
4 голосов
/ 19 декабря 2011
dc= new myDataContext();
var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList();
4 голосов
/ 10 апреля 2009

Вы можете сделать это с помощью отражения. По сути, вы перебираете свойства в своем классе DataContext . Для каждого свойства проверьте, имеет ли тип общего параметра этого свойства атрибут TableAttribute . Если это так, это свойство представляет таблицу:

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);
        }
    }
}
1 голос
/ 09 июля 2012
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 голосов
/ 25 апреля 2019

для СП

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

для таблиц

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