我正在使用实体框架和 Linq to Entity。我创建了一个小型数据库模式和框架来实现版本控制和本地化。现在每个实体都包含两个或三个表(即 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 之后,但我宁愿不要从数据库中提取比我需要的更多的东西。
感谢您的任何提示!