假设:
BaseEntity
ChildEntity : BaseEntity
问题在于以有效的方式获得基础实体。我所知道的是这种类型的查询:
var results = context.BaseEntities.Where(entity => !(entity is ChildEntity) );
然而,非常容易出现问题,因为只需向BaseEntity
添加其他扩展程序就像ChildEntityTwo : BaseEntity
一样会破坏查询(查询将包含BaseEntity
和ChildEntityTwo
种类型。
此外,我还没有机会对其进行分析,但我怀疑查询会下载所有实体并将其过滤到内存中,但我可能错了。
请注意,解决方案context.BaseEntities.OfType<BaseEntities>()
实际上也会包含并下载所有实体!它仅在您需要端点类时才有效,例如ChildEntityTwo
答案 0 :(得分:1)
为此目的,ESQL提供OFTYPE ONLY
运算符,但该运算符在Linq中没有任何等效运算符。您可以使用this workaround为Linq构建OFTYPE ONLY
。