【发布时间】:2018-05-07 20:04:56
【问题描述】:
为了过滤项目列表,我使用了类似这样的相关属性的类型。
var list = Context.Items
.Include(_ => _.Details)
.Where(_ => _.Details.Kind == kind));
return list;
这将返回由 kind 过滤的完整列表,在这种情况下这是相当糟糕的,因为 Details 属性很大,在每个返回的元素中都精确复制(没有两个细节同一种可能永远不同),并且项目列表可能很长。
因此,在 Details 中使用 kind 过滤出正确的项目子集时,我希望该字段在返回时为空。解决它的一种方法是获取所有项目的ID,然后根据它进行选择。似乎效率低下且缓慢。另一种方法是将 guid 迁移到类 Item 中并将其用于过滤。这对于数据模型来说似乎是重复的和侵入性的。
有没有一种巧妙的方法来删除包含的属性?
我正在考虑与以下(不工作,富有想象力)示例等效。
var list = Context.Items
.Include(_ => _.Details)
.Where(_ => _.Details.Kind == kind));
return list.Forget(_ => _.Details);
【问题讨论】:
-
如果您访问查询本身内部的导航属性,则不需要包含。仅当您希望最终结果集中的数据时才需要包含。