我正在使用實體框架和Linq到實體。我創建了一個小型數據庫模式框架來實現版本化和本地化。現在每個實體都由兩個或三個表(即Product,ProductBase & ProductLocal)組成。自動添加一些Where子句到Linq表達式樹
我的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生成的基類以實現一些enfo接口屬性(IVersionStatus和/或IVersionLanguage)。有什麼方法可以遍歷表達式樹,檢查表達式中的類型是否實現了該接口,然後相應地設置VersionStatus?
我非常喜歡它,就像第一個選項一樣簡單,只是少寫和/或忘記。我看過一些事例,在IEnumerable之後做了它,但我寧願不從數據庫中拉出超過我需要的數量。
感謝您的任何提示!