Entity Framework と Linq to Entities を使用しています。バージョニングとローカリゼーションを実装するための小さなデータベース パターンとフレームワークを作成しました。すべてのエンティティは、2 つまたは 3 つのテーブル (つまり、Product、ProductBase、および ProductLocal) で構成されています。
私のlinqには常に次のボイラープレートコードが含まれています:
from o in DB.Product
from b in o.Base
from l in o.Local
WHERE o.VersionStatus == (int)VersionStatus.Active
&& b.VersionStatus == (int)VersionStatus.Active
&& l.VersionStatus == (int)VersionStatus.Active
&& l.VersionLanguage == Context.CurrentLanguage
select new ProductInstance { Instance = o, Base = b, Local = l }
私が達成したいのは、上記を次のようにすることです。
(from o in DB.Product
from b in o.Base
from l in o.Local
select new ProductInstance { Instance = o, Base = b, Local = l }).IsActive()
または最悪の場合、次のようなものです。
from o in DB.Product.Active()
from b in o.Base.Active()
from l in o.Local.Active()
select new ProductInstance { Instance = o, Base = b, Local = l }
EDM が生成する基本クラスを拡張して、プロパティ ( IVersionStatus や IVersionLanguage ) を適用するいくつかのインターフェイスを実装しました。式ツリーをたどり、式の型がそのインターフェイスを実装しているかどうかを確認し、それに応じて VersionStatus を設定する方法はありますか?
最初のオプションと同じくらいシンプルで、書くことや忘れることが少なくなるのが大好きです. 事後、IEnumerable の後でそれを行う例を見てきましたが、必要以上にデータベースから取得したくありません。
ヒントをありがとう!