我有一种情况,我试图使用派生的子类过滤 LINQ 选择。
ctx.BaseEntity.OfType<SubClass>()
- 这很好用。
但是,我想改为使用字符串值来执行此操作。当我有很多(> 20)子类并且选择不使用 OfType 的实体时,我遇到了性能障碍。我有一个从基类呈现的通用 UI,所以我不知道编译时将返回什么类类型。
所以我想做的是:
- 执行一个预计的选择,我只从数据库中返回 SubClassType
使用此值作为 OfType 执行第二次选择以仅从数据库中选择相关的相关实体(不生成大量联合)
int id = 1; var classType = (from c in ctx.BaseClass.Include("ClassType") where c.id == id select new { c.ClassType.TypeName }).First(); BaseClass caseQuery = ctx.BaseClass.OfType<classType.TypeName>() .Include("ClassType") .Include("ChildEntity1") .Include("ChildEntity2") .Where(x => x.id== id);
但显然这行不通,因为 OfType 需要类型而不是字符串。
关于如何实现这一目标的任何想法?
更新: 作为原始问题的旁注,事实证明,当您投影使用导航属性的查询时 - 它也构建了怪物 SQL,所以我最终使用存储过程来填充我的 ClassType 实体基类 ID。