エンティティフレームワーク:L2E から基本型を返す方法
-
01-07-2019 - |
質問
次のアーキテクチャを考慮します。
- 基本オブジェクト「エンティティ」
- 派生オブジェクト「Entry:Base」
- およびさらに派生したオブジェクト「CancelledEntry:Entry」
EntitySQL では次のように記述できます。
[...] where it is of (only MyEntities.Entry) [...]
Entry タイプのオブジェクトのみを返し、Entity や CancelledEntry は返しません。
linq to sql では、次のコマンドは Entry および CancelledEntry タイプのオブジェクトを返します。
EntityContext.EntitySet.OfType<Entry>()
Entry 型のオブジェクトのみを返すために使用する構文/関数は何ですか?
解決
このフィルターを適用して IQueryable< Entry > を返す、ApplyBaseEntryFilter() という拡張メソッドを IQueryable< Entry > に適用してみてはいかがでしょうか。
これは、linq クエリ フラグメントを再利用する方法の例です。IQueryable< Entity > で拡張メソッドを使用すると、アプリケーションの周囲でクエリ フラグメントをコピーして貼り付ける必要がなくなるため、クエリを再利用する優れた方法になります。これが役立つことを願っています。
他のヒント
OK、部分的な解決策を見つけました。
EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )
ただし、これは非常にひどいことです。新しい派生オブジェクトを作成する場合、すべてのクエリを実行し、それを削除するための条件を具体的に追加する必要があるからです。
もっと良い解決策があるはずです
所属していません StackOverflow