过滤 thenInclude 三个嵌套级别

2023-12-05

我试图向下过滤三个子级别并仅查找 Property Mailing Address.Status== True 的子元素。

它仍然返回 PropertyMailingAddress.Status 下为 False 的值

如何将过滤器向下转换三级并使用 thenIninclude 进行嵌套过滤?

类结构嵌套如下:

  1. Property
  2. 财产党
  3. Party
  4. 当事人邮寄地址
  5. 物业邮寄地址
var result = await propertyRepository.GetAll()
                .Include(pm => pm.PropertyParty).ThenInclude(x => x.Party).ThenInclude(x => x.PartyMailingAddress).ThenInclude(x => x.PropertyMailingAddress)
                .Where (a=> a.PropertyParty.Any(x=> (x.Party.PartyMailingAddress.Any(z => z.PropertyMailingAddress.Any(h => h.Status.HasValue && h.Status.Value && h.Status == true))))

人们倾向于使用“包含”作为某种选择的快捷方式。但是,包含所有属性通常会浪费处理能力,因为您不会使用其中的几个属性或者因为您已经知道其值。

以学校与学生为例,这是一种简单的一对多关系。每个学校都有零个或多个学生,每个学生都就读于一所学校,即外键 SchoolId 所指的学校。

因此,如果学校 [10] 有 2000 名学生,则每个学生的 SchoolId 值都等于 10。如果您查询学校 [10] 及其学生,则将传输此值 [10] 超过 2000 次。多么浪费处理能力啊!

在实体框架中,使用Select查询数据,并且仅选择您实际计划使用的值。仅使用Include如果您打算更新包含的数据。

当然不要使用“包含”作为“选择所有属性”的某种快捷方式!

回到你的问题

  • 每个 Property 都有零个或多个 PropertyParties。
  • 每个 PropertyParty 都有零个或多个 Properties。
  • 每个属性都有零个或多个 PartyMailingAddresses
  • 每个 PartyMailingAddress 都有零个或多个 PropertyMailingAddress
  • 每个 PropertyMailingAddress 都有一个布尔属性 Status

您想要查询所有属性(的多个属性),这些属性的内部至少有一个具有真实状态值的 PropertyMailingAddress。

每当您有一系列 Items,其中每个 Item 都有 OtherItems 的子序列,并且您想要调查所有 OtherItems,就好像它是一个序列一样,请考虑使用 SelectMany:

var propertiesWithTrueStatus = propertyRepository.GetAll()
    .Where(property => property.SelectMany(property => property.PropertyParties)

        // result: one big sequence of all PropertyParties of all properties
        .SelectMany(propertyParty => propertyParty.PartyMailingAddresses)

        // result: one big sequence of all PartyMailingAddresses of all 
        // PropertyParties of all Properties
        .SelectMany(partyMailingAddress => partyMailingAddress.PropertyMailingAddresses)
        .Select(propertyMailingAddress => propertyMailingAddress.Status)

        // result: one big sequence of all Statusses of all PropertyMailingAddresses
        // of all ... of all Properties

        // Keep only the true status values:
        .Where(status => status)

        // keep only the Properties that have at least one true Status value
        .Any())
        // end of Where(...)

因此,现在您只有那些在内部深处至少具有一个真实状态值的属性。继续查询Select(或者如果你真的想要:Include)

    .Select(property => new
    {
        // Select only the properties that you actually plan to use
        Id = property.Id,
        Name = property.Name,
        ...

        PropertyParties = property.PropertyParties.Select(propertyParty => new
        {
            // again only the properties that you plan to use:
            Id = propertyParty.Id,
            ...

            // no need to Select this, you already know the value
            // PropertyId = propertyParty.PropertyId

            PartyMailingAddresses = propertyParty.PartyMailingAddresses
                .Select( partyMailingAddress => new { ... } )
                .ToList(),
        })
        .ToList(),
    });

除此之外,Select 比 Include 更高效,如果需要,它还可以让您更自由地偏离数据库表。如果您不需要最终结果中的所有 PropertyMailingAddresses,则只需不要选择它们即可。如果您只需要 PropertyParties 的总数,请使用PropertyPartyCount = propertyParties.Count。使用 Select,返回的数据不必与数据库表相似。

这样做的优点是您可以隐藏数据库中的更改:只需更改选择,所有用户都不会注意到您在内部深处更改了表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤 thenInclude 三个嵌套级别 的相关文章

  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换

    我目前正在开发一个应用程序 其中音频样本帧在以下回调中进行处理 void Eav07AudioProcessor processBlock AudioSampleBuffer buffer for int channel 0 channel
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • C# 中成员访问中的问号是什么意思?

    有人可以向我解释一下以下代码中会员访问中的问号是什么意思吗 它是标准 C 的一部分吗 尝试在 Xamarin Studio 中编译此文件时出现解析错误 this AnalyzerLoadFailed Invoke this new Anal
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 迭代目录中的所有文件并查找和替换文本 - Python

    宝贝全新 这是弗兰肯斯坦从几个类似的主题组合在一起的 其中没有一个似乎涵盖了在文件循环中嵌套查找和替换的必要步骤 我试图迭代特定类型 此处列为 LIC 的文件夹中的每个文件 不是递归 我只有一个文件夹级别 并替换一小段文本 以下是我所能得出
  • MSBuild XmlMassUpdate 任务

    我想问一个有关 MSBuild 任务 XmlMassUpdate 行为的简单问题 有没有人发现该任务只会将唯一节点复制到内容 XML 中 例如 如果我有一个客户端节点 它有多个称为端点的子节点 那么它只会批量复制第一个端点节点 同时消除所有
  • 如何使用spring全局配置jackson?

    为了序列化反序列化对象 我使用 Jackson 作为流程 JsonSerialize using LocalDateSerializer class JsonDeserialize using LocalDateDeserializer c
  • 如何在本机反应中隐藏特定屏幕上的底部导航栏?

    我正在使用 React Native 和 React Native Navigation 来构建我的应用程序 目前 我有三个底部选项卡 主页 上传视频和消息 选择 上传视频 选项卡后 我想渲染 上传视频 组件并隐藏该屏幕上的底部选项卡 并显
  • 从 JDBC 创建 Spark 数据帧时如何指定 sql 方言?

    我在使用 Spark 通过自定义 JDBC 读取数据时遇到问题 我将如何覆盖通过 jdbc url 推断的 sql 方言 有问题的数据库是 vitess https github com youtube vitess 它运行一个 mysql
  • 在 asp.net 中显示“保存文件”对话框

    这是在 asp net 中 我正在参考用户的输入创建 pdf 文件 该 pdf 文件保存在服务器上的文件夹中 现在可以使用response redirect 在浏览器中显示该文件 但我想向用户显示 保存文件 对话框 就像我们从网站下载 ex
  • 选择 CSS 中的特定元素

    抱歉 帖子标题非常笼统 但我在这里追求的是 div span a href link 1 a a href link 2 a span a href link 3 a div 我如何在 CSS 中选择 链接 3 无需编辑该 Htmlat a
  • Firebase 身份验证和 Google 日历

    我想做的是使用 Firebase 向 Google 进行身份验证 然后从 Google 日历获取一些数据 我让第一部分工作了 我可以通过 Google 进行身份验证并获取用户名 电子邮件等 但是一旦添加calendar to the sco
  • Button.PerformClick 的作用是什么?

    我知道这可能是一个微不足道的问题 但我只是想知道调用是否有任何优势Button PerformClick而不是直接调用按钮的点击事件 MSDN 文档简单地说 为按钮生成 Click 事件 这是否意味着它只是与调用按钮的单击事件执行相同的操作
  • 绘图中的保留热图

    为了方便起见 我将保留图从 Seaborn 转移到 Plotly 以便稍后对其应用形状 plotly库似乎适合this graph objects 但我不明白如何传递DataFrame数据 import pandas as pd impor
  • 访问连续表:添加控件而不修改基础表?

    我正在制作一个简单的访问表单 连续视图 详细信息部分中有一个复选框 页脚中有一个命令按钮 这样 用户可以使用复选框 选择 多个记录 然后单击按钮上的命令按钮来运行更新所选记录的脚本 无需永久存储这些检查值 通常 我会向基础表添加一个布尔字段
  • 更改文本区域中特定部分的文本颜色

    是否有可能更改 HTML 文本区域中某些部分的文本颜色 我喜欢在我的网站上输出一些突出显示的 PHP 代码 并可以通过单击此文本区域来选择完整的代码 我已经编写了一个 JavaScript 函数来选择完整的文本 但如果我尝试在文本周围放置跨
  • 将图钉放在屏幕中央,MKMapView

    我有一个使用以下代码删除 pin 的功能 ParkPlaceMark placemark ParkPlaceMark alloc initWithCoordinate location mapView addAnnotation place
  • 第二次单击时 redux 状态值发生变化

    我是 redux 的新手 我已将其与我的 React 应用程序集成 但我有一个关于小测试的说明 在下一个示例中 我看到用户的值在我的第二次单击时添加了 减速机 const initialState user password export
  • 计算表行数

    检索表中记录数的 MySQL 命令是什么 SELECT COUNT FROM fooTable 将计算表中的行数 See the 参考手册
  • getJSON 调用中的错误处理

    如何处理 getJSON 调用中的错误 我尝试使用 jsonp 引用跨域脚本服务 如何注册错误方法 getJSON 是常规 AJAX 调用的一种抽象 您必须在其中告诉您需要 JSON 编码的响应 ajax url url dataType
  • Ionic - 按下按钮后显示微调器

    This spinnerionic 的选项一直在旋转像这儿
  • JdbcTemplate - 使用 SQL MERGE 插入或更新 Oracle BLOB

    使用 JdbcTemplate 我想调用 MERGE SQL 语句 该语句将向表中插入新记录 或者如果具有特定键的行已存在则进行更新 关键部分是其中一列是 Oracle BLOB 类型 这是我到目前为止所尝试的 Try 1 sql语句 St
  • Java - 使用 Apache Commons 数学库计算导数

    我在使用 apache commons 数学库时遇到问题 我只想创建像 f x 4x 2 2x 这样的函数 并且我想计算这个函数的导数 gt f x 8x 2 我读过关于差异化的文章 http commons apache org prop
  • 过滤 thenInclude 三个嵌套级别

    我试图向下过滤三个子级别并仅查找 Property Mailing Address Status True 的子元素 它仍然返回 PropertyMailingAddress Status 下为 False 的值 如何将过滤器向下转换三级并