为了过滤项目列表,我使用了相关属性的类型。
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);
答案 0 :(得分:3)
Include
。
转换为SQL的操作(如GroupBy
和Where
)不需要使用Include
,因此您可以这样做:
var list = Context.Items.Where(_ => _.Details.Kind == kind));
另一个常见错误(据我所见),Include
与Select
一起使用。当您使用Select
时,所有Include
都会被有效丢弃。