0

次のアーキテクチャを検討します。

  • ベースオブジェクト'エンティティ'
  • 派生オブジェクト'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のオブジェクトのみを返すために使用する構文/関数は何ですか?

4

2 に答える 2

2

このフィルターを適用して IQueryable< Entry > を返す ApplyBaseEntryFilter() と呼ばれる拡張メソッドを IQueryable< Entry > に適用してみませんか。

これは、linq クエリ フラグメントを再利用する方法の例です。IQueryable< Entity > で拡張メソッドを使用することは、アプリケーションのクエリ フラグメントをコピーして貼り付ける必要がないため、クエリを再利用する優れた方法です。

于 2008-10-07T06:50:47.920 に答える
1

わかりました、私は部分的な解決策を見つけました:

EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )

ただし、新しい派生オブジェクトを作成する場合は、すべてのクエリに移動し、それを削除する条件を具体的に追加する必要があるため、これは非常にひどいことです。

より良い解決策があるはずです

于 2008-09-20T16:31:34.167 に答える