2009-04-09 12 views

答えて

28

これは、上記よりはるかに簡単であり、リフレクションは必要ありません。 Linq to SQLには、すべてのテーブルの列挙を取得するために使用できるマッピングプロパティがあります。

context.Mapping.GetTables(); 
+0

ニース、私はそれについて知らなかった。 –

+0

whooo hooそれはさらに優れています! – Sergey

+0

ええ、私は自分のようなものを探し続けています。 :)を渡すのはいつも楽しいです。 –

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); 
     } 
    } 
} 
+0

ふざけんなよ!あなたは速すぎる入力:P – SirDemon

+0

@SirDemon実際に私は完全に間違った答えを得て、それを削除し、Visual Studioで正しい答えをテストし、削除されずに修正されました:) –

+0

本当にありがとう、 – 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); 
     } 
    } 
} 
関連する問題