c# - 使用 Include() 进行过滤后如何排除属性
问题描述
为了过滤项目列表,我使用了这样的相关属性的类型。
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);
解决方案
Include
仅当您希望该导航属性的数据包含在结果 中时才需要。
转换为 SQL 的操作,比如GroupBy
and Where
,不需要使用Include
,所以你可以这样做:
var list = Context.Items.Where(_ => _.Details.Kind == kind));
另一个常见错误(据我所知)是使用Include
with Select
。当你使用 时Select
,所有Include
的 s 都被有效地扔掉了。
推荐阅读
- arm - 汇编 stm r12,{r1,r4,r7} 指令触发的 ARM Cortex R5 异常
- ajax - 在 azure web 应用程序中使用 axios post/get 进行全日历时出现内部服务器错误 500
- javascript - 使用自动完成功能获取 API 数据并过滤搜索输入
- python - 为 RNN 使用转换时间戳
- ios - 打开XIB文件出现黑屏
- python - 使用 MySQL 从 Django QuerySet 中获取不同的值
- electron - 有没有办法提高 Electron 中 webview 的性能?
- java - 为什么会引发异常?
- node.js - 为生产构建我的电子 vue 应用程序后出现白屏
- prisma - Prisma2 无法转换为“timestamptz”类型的 Postgres 值或从其转换