查询首先只获取EF代码中的根/基实体

时间:2012-07-20 11:40:16

标签: linq linq-to-entities ef-code-first entity-framework-5

假设:

BaseEntity
ChildEntity : BaseEntity

问题在于以有效的方式获得基础实体。我所知道的是这种类型的查询:

var results = context.BaseEntities.Where(entity => !(entity is ChildEntity) );

然而,非常容易出现问题,因为只需向BaseEntity添加其他扩展程序就像ChildEntityTwo : BaseEntity一样会破坏查询(查询将包含BaseEntityChildEntityTwo种类型。

此外,我还没有机会对其进行分析,但我怀疑查询会下载所有实体并将其过滤到内存中,但我可能错了。

请注意,解决方案context.BaseEntities.OfType<BaseEntities>()实际上也会包含并下载所有实体!它仅在您需要端点类时才有效,例如ChildEntityTwo

1 个答案:

答案 0 :(得分:1)

为此目的,ESQL提供OFTYPE ONLY运算符,但该运算符在Linq中没有任何等效运算符。您可以使用this workaround为Linq构建OFTYPE ONLY

相关问题