2012-05-12 4 views
2

どのように行うことができます。Entity FrameworkのOfType()dynamicly

Type ty = Type.GetType("Student"); 
var students = db.People.OfType(ty); 

動作するように?

なぜですか?

例として人物/学生のみを使用しましたが、私はこれをやりたい理由を少し詳しく説明します。

特定の文化に関係するリレーショナル構造に郵便住所情報を格納できるようにしたいと考えています。私の考えは基本的な型を持つことでした: "住所"とそれの継承された型、例えば "UK_Address"。そして、私の "People"エンティティは単に "Address"リファレンスを持っています。特定のアドレスタイプの名前をPersonタイプ内の文字列として格納し、この名前を使用してアドレスとやり取りするときのプログラムの動作を指示します。

これは意味がある場合は! :

Type ty = ... 
var students = db.People.OfType<ty>(); //Doesn't work, see below 

その後、私はそれが反射せずに動作するとは思わない:

+0

参照してください?継承されたクラス間で差をつけようとすると、EFでそれを行うより良い方法があります。 – Robert

+0

元の投稿を編集しました... – user627752

答えて

1

は、あなたがの線に沿って答えを探している場合です。あなたはこれをどうするtriingさ

IQueryable OfType<T> where T is a runtime Type

+0

.ofType は実際には機能しません。コンパイルすることができます。 "IsSubclassOf"は存在しません。 – TcKs

+0

私はあなたのコメントを理解していない、私は言った.ofype は反射なしで動作し、Type.IsSubclassOfは存在しません。実際にIsAssignableFromの逆です:http://msdn.microsoft.com/en-us/library/system.type.issubclassof.aspx – Statue26

+0

申し訳ありません - 私は "IsSubclassOf"が.NET 4で間違っています。しかし、 "IsSubclassOf"はクラスのためだけに働く。構造体やインタフェースはありません。 "OfType ()"は本当に悪いアプローチです。それを反映させる方法がありますが、本当に複雑で非効率です。非機能的または半機能的な解決策を助言しない方がよい。 – TcKs

-1
Type ty = typeof(Student); // tyopeof() is "safer" than Type.GetType() 
var students = db.People.Where(x=>ty.IsAssignableFrom(x.GetType())); 
+0

SQLに変換できません。 – usr

+0

".OfType ()"もありません。 – TcKs

+0

OfTypeはSQLに変換可能です。 EFはそのように継承をサポートしています。 – usr