【发布时间】:2011-01-20 11:17:17
【问题描述】:
我尝试使用派生子类过滤 LINQ 选择。
ctx.BaseEntity.OfType<SubClass>() - 这很好用。
但是,我想改为使用字符串值来执行此操作。当我有很多(> 20)子类并且不使用 OfType 选择实体时,我遇到了性能障碍。我有一个从基类呈现的通用 UI,所以我不知道编译时会返回什么类类型。
所以我想做的是:
- 执行计划的 Select where I 只返回 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 需要 Type 而不是字符串。
关于如何实现这一点的任何想法?
更新: 作为原始问题的旁注,事实证明,当您投影使用导航属性的查询时 - 它也构建了怪物 SQL,所以我最终使用存储过程从 BaseClass 填充我的 ClassType 实体身份证。
【问题讨论】:
标签: entity-framework inheritance table-per-hierarchy table-per-type