Linq:获取DataContext中所有表的列表

时间:2009-04-09 22:55:55

标签: .net linq asp.net-3.5 datacontext

我有一个包含100多个表的DataContext(Linq to Sql),是否可以获取所有这些表的列表并让它们打印到控制台?这可能是一个愚蠢的问题。

感谢。

5 个答案:

答案 0 :(得分:29)

比上面容易得多,不需要反思。 Linq to SQL有一个Mapping属性,可用于获取所有表的枚举。

context.Mapping.GetTables();

答案 1 :(得分:4)

你可以通过反思来做到这一点。基本上,您迭代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);
        }
    }
}

答案 2 :(得分:4)

dc= new myDataContext();
var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList();

答案 3 :(得分: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);
        }
    }
}

答案 4 :(得分:0)

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

用于表格

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