如何在 Include() 使用后排除属性以进行筛选



为了过滤项目列表,我使用了像这样的相关属性的类型。

var list = Context.Items
.Include(_ => _.Details)
.Where(_ => _.Details.Kind == kind));
return list;

这将返回按种类筛选的完整列表,在这种情况下,这是相当糟糕的,因为Details属性很大,在每个返回的元素中精确地重复(没有两个相同类型的细节可以不同),并且项目列表可能很长。

因此,在详细信息中使用kind来过滤掉正确的项目子集时,我希望该字段在返回时为空。解决该问题的一种方法是获取所有项目的 ID,然后基于此进行选择。似乎效率低下且缓慢。另一种方法是将 guid 迁移到类中,并将其用于筛选。对于数据模型来说,这似乎是重复和侵入性的。

有没有一种巧妙的方法可以删除包含的属性?

我正在考虑一个等效于以下(不起作用,富有想象力的)示例。

var list = Context.Items
.Include(_ => _.Details)
.Where(_ => _.Details.Kind == kind));
return list.Forget(_ => _.Details);

仅当您希望该导航属性的数据包含在结果中时才需要Include

翻译成SQL的操作,如GroupByWhere,不需要使用Include,所以你可以做:

var list = Context.Items.Where(_ => _.Details.Kind == kind));

另一个常见的错误(据我所知),是将IncludeSelect一起使用。当你使用Select时,所有的Include都被有效地扔掉了。

相关内容

  • 没有找到相关文章