8

100 を超えるテーブルを含む DataContext (Linq to Sql) があります。これらすべてのテーブルのリストを取得して、それらをコンソールに出力することはできますか? これはばかげた質問かもしれません。

ありがとう。

4

5 に答える 5

30

上記よりもはるかに簡単で、反射は必要ありません。Linq to SQL には、すべてのテーブルの列挙を取得するために使用できる Mapping プロパティがあります。

context.Mapping.GetTables();
于 2009-04-10T00:22:19.640 に答える
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);
        }
    }
}
于 2009-04-09T23:04:42.823 に答える
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);
        }
    }
}
于 2012-07-09T09:18:30.123 に答える