如何仅选择 OData 子元素

2024-01-08

我正在构建一个 OData 应用程序,并且正在努力了解如何检索结果并且仅包含某些(子属性)。

首先,让我向您展示在我的构建器中的注册:

builder.EntitySet<AggregatedArticlesSearchModel>("Search").EntityType.HasKey(x => x.Name);

现在,讨论我从查询返回的模型:

<EntityType Name="AggregatedArticlesSearchModel">
    <Key>
        <PropertyRef Name="Name"/>
    </Key>
    <Property Name="Name" Nullable="false" Type="Edm.String"/>
    <Property Name="Values" Type="Collection(Zevij_Necomij.Mobile.App.Api.Models.OccurenceViewModel)"/>
</EntityType>
<ComplexType Name="OccurenceViewModel">
    <Property Name="Value" Type="Edm.String"/>
    <Property Name="Count" Nullable="false" Type="Edm.Double"/>
    <Property Name="Articles" Type="Collection(Zevij_Necomij.Mobile.App.Api.Models.AggregatedArticleDescriptionViewModel)"/>
</ComplexType>
<ComplexType Name="AggregatedArticleDescriptionViewModel">
    <Property Name="Name" Type="Edm.String"/>
    <Property Name="Specification" Type="Edm.String"/>
    <Property Name="Brand" Type="Edm.String"/>
</ComplexType>

当我执行获取数据的请求时,我没有做任何花哨的事情,只是从数据库返回结果:

public async Task<IHttpActionResult> Get()
{
    // Create all the managers for the platform context that are required by the application.
    var classificationManager = Context.CreateManager(typeof(AggregatedArticleManager<>)) as AggregatedArticleManager<IAggregatedArticleStore<AggregatedArticle>>;

    var classifications = await classificationManager.GetAllAsync();

    var returnList = classifications.OrderBy(x => x.Name).Select(AggregatedArticlesSearchModel.MapFromDbModel).ToList();

    return Ok(returnList.AsQueryable());
}

由于我正在处理子对象,因此列表可能会变得相当大:

{
  "@odata.context":     "http://api.mobileapp.appserver.dev.dsoft.be/OData/$metadata#Search",
  "value": [
    {
      "Name": "(Veiligheids)slipkoppeling",
      "Values": [
        {
          "Value": "ja",
          "Count": 118,
      "Articles": [
        {
          "Name": "230 V Sleuvenzaag",
          "Specification": "Compacte machine",
          "Brand": "Makita"
        },
        {
          "Name": "230V Cirkelzaag SJS",
          "Specification": "Softstart voor
        },
    }
}

我可以在一组中包含一千篇文章,因此,通过 Web Api 返回的内容非常多。 由于我不需要在单个请求中使用所有这些属性,因此我想让客户端仅通过使用来检索子属性?$select参数,因此客户可以说:

OData/Search?$select=Values

这里的问题是,例如,我只想返回计数,因此,我认为这样的请求是可能的:

OData/Search?$select=Values/Count

但是,这会导致 OData 错误:"The query specified in the URI is not valid. Found a path with multiple navigation properties or a bad complex property path in a select clause. Please reword your query such that each level of select or expand only contains either TypeSegments or Properties."

有人知道如何解决这个问题吗?


@复杂

据我所知,不支持在属性中选择子属性。

但是,如果您构建OccurenceViewModel作为实体类型,那么您可以使用 $expand 中嵌套的 $select 来满足您的要求。

例如:

1)构建实体类型

builder.EntitySet<OccurenceViewModel>("ViewModels").EntityType.HasKey(x => x.Value);

then, Values in AggregatedArticlesSearchModel应该是一个导航属性。

2) 现在,您可以发出 GET 请求,如下所示,仅返回 Count 属性:

GET ~/odata/Search?$select=Values&$expand=Values($select=Count)

然后,有效负载应如下所示:

{
  "@odata.context":"http://localhost/odata/$metadata#Search(Values,Values(Count))","value":[
    {
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    },{
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    }
  ]
}

希望它可以帮助你。谢谢。

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

如何仅选择 OData 子元素 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 限制自定义控件的可调整大小的尺寸 (c# .net)

    我正在 MS Visual C 中制作用户控件 但有一件事我找不到答案 如何限制在设计视图期间可以调整控件大小的尺寸 为了清楚地说明我的要求 内置的 TrackBar 控件只能变宽 不能变高 并且在设计模式下仅在左侧和右侧显示调整大小的方块
  • 你能在scala中测试嵌套函数吗?

    有没有办法测试嵌套函数 最好使用 ScalaTest 例如有没有办法测试g 在下面的代码中 def f def g a string g says g g在外部不可见f 所以我敢说不 至少不经过深思熟虑 我认为测试g无论如何 这会打破单元测
  • 值得使用Python的re.compile吗?

    在Python中使用正则表达式编译有什么好处吗 h re compile hello h match hello world vs re match hello hello world 我有很多运行已编译的正则表达式 1000 次与即时编译
  • AttributeError:在 Django 中迁移时模块“MySQLdb.constants.FIELD_TYPE”没有属性“JSON”

    不知道用什么方法解决这个错误 有什么提示吗 我有简单的 Django 项目 并在尝试执行 python3 manage py 迁移时收到此错误 这与应用程序中的任何编程错误有关 或者可能存在与 mysql 的安装及其软件包的完整性相关的任何
  • 在不使用 FileStreams 的情况下以 WAL 模式备份 sqlite 数据库 // 通过导出/备份 sql 命令

    我在这里搜索了很多答案 但都使用FileInputStream and FileOutputStream备份数据库 文件复制在您使用时失败PRAGMA声明与journal mode WAL 预写日志记录 异步模式等等 如何在 Android
  • Zuul 背后的 Spring Oauth2 身份验证 AWS

    我有一个问题 问题 我在 aws 上运行着一个 典型的 spring cloud netflix 环境 现在我的问题是 给出 工作验证 请求 https DOMAIN net gt AWS 负载均衡器 添加标头 X Forwarded Fo
  • cin >> i 输入符号 + 时出错

    在 C 程序中 我尝试处理由散布有运算符 的整数操作数组成的用户输入 我可以要求用户在每个运算符之前和之后添加空格 我的方法是假设任何不是 int 的东西都是运算符 因此 一旦流上出现非 eof 错误 我就会调用 cin clear 并将下
  • Node.js + Joi 如何显示自定义错误消息?

    在 Node js REST api 中验证用户的输入似乎非常简单Joi 但问题是我的应用程序不是用英语编写的 这意味着我需要向前端用户发送自定义的书面消息 我用谷歌搜索过这个 只发现了问题 也许有人可以为此提供解决方案 这是我用来验证的代
  • 如何在python中强制使用默认参数

    TLDR 我想将一个参数传递给一个函数 强制该函数使用它的默认值 就好像我没有提供任何参数一样 例如 def foo string DEFAULT PARAM print string def bar string None foo str
  • 如何在嵌套列表中执行条件搜索

    我有一个嵌套列表 如下所示 list c Oesophagus irregular z line as previously quad biopsies at m c Normal examination cardia mild infla
  • Django Rest-auth 注册。使用令牌认证时如何返回带有密钥的user_id

    我正在使用 Django rest auth registration 我在 urls py 中对应的条目是 url r rest auth registration include rest auth registration urls
  • 创建多屏支持应用android

    我正在 Android 中创建一个必须支持多个屏幕的应用程序 为此 我阅读了很多答案 其中我最喜欢的一个是我可以在其中创建不同的文件夹res按以下名称命名的文件夹 对于小屏幕小布局 适用于大屏幕布局大 对于超大屏幕布局 xlarge 我必须
  • 如何使用 DataContractJsonSerializer 将类类型而不是命名空间序列化为 Json 字符串

    我正在尝试使用将类层次结构序列化为 Json 字符串DataContractJsonSerializer 在 WCF 服务中 序列化派生类的默认行为是将以下键值对添加到对象 type ClassName Namespace 我的问题是命名空
  • 保存单个实体而不是整个上下文

    我遇到了一种情况 我本质上需要将一对多关联的子实体的更改写入数据库 但不保存对父实体所做的任何更改 实体框架当前处理上下文范围内的数据库提交 EntityContext SaveChanges 这对于强制执行关系等有意义 但我想知道是否有一
  • 如何检查dojo.datagrid加载完成? [复制]

    这个问题在这里已经有答案了 我的其中一个页面中有一个 dojo datagrid Datagrid 及其存储 通过调用 URL 是通过声明性方法创建的 不是通过动态 程序化 我需要执行一个 javascript 方法 该方法在我的数据网格下
  • 从两个相交的链表中查找相交的节点

    假设有两个单链表 它们在某个点相交并成为单链表 两个列表的头或起始指针已知 但相交节点未知 此外 每个列表在相交之前的节点数量是未知的 并且两个列表可能有所不同 即 List1 在到达相交点之前可能有 n 个节点 而 List2 在到达相交
  • 从 LazyLoadCollection 获取元素

    我已经发现Doctrine Common Collections Criteria如果它们对我有用的话 这是一个非常有用的概念 在 symfony 控制器中 我调用以下代码 criteria Criteria create gt where
  • 我对 SOAP 命名空间感到困惑

    我正在学习 SOAP 实现 并且对 SOAP 1 2 Envelope 的适当名称空间 URI 感到有些困惑 The SOAP 的 w3c 规范 http www w3 org TR soap12 part1指的是 http www w3
  • Ecto 查询 - 日期 + Postgres 间隔 + 查询插值

    我想创建一个 Ecto 查询来过滤 a 中的记录children按年龄排列的表格 即 最小年龄 月 gt 最大年龄 月 一种简单的方法是使用 Ectodate add特征 from c in Child where c birthday g
  • 如何仅选择 OData 子元素

    我正在构建一个 OData 应用程序 并且正在努力了解如何检索结果并且仅包含某些 子属性 首先 让我向您展示在我的构建器中的注册 builder EntitySet