前言

有时候太久没有写真的会忘记,官网又太罗里吧嗦,还是写一篇帮助以后快速复习进入状况吧。

Request URL: "/root/version/entities"

OData path 长这样

/api/v1.0/projects

第一个 segment 是 API 路径的开头。

常见的是开头有 “/odata/” 或者 “/api/”

第二个 segment 是 version

比如: "v1.0" 或者 "v2.1"

第三个 segment 是 entity name (通常是以 plural 命名)

比如:"products", "projects", "people"

完整的 URL 长这样

https://example.com/api/v1.0/projects

Response Data

OData 的 response 长这样

一定是一个对象。

value 是一个 array,里面是 entity 对象。

$select

$select 可以指定 response data 的 property,没有指定就是出到完

/api/v1.0/projects?$select=id

效果

property name 没了,因为 $select 指定只输出 property id 而已。

$skip, $top (pagination)

假设一页显示 10 条数据,当前在第二页,那需要显示的数据就是第 11 条到第 20 条。

/api/v1.0/projects?$skip=10&$top=10

$skip=10 表示前 10 条数据不要 (第 1 到 第 10 不要,也就是从第 11 开始拿)

$top=10 表示只拿 10 条数据出来 (也就是拿到第 20 条)

$count

$count 是用来弥补 $skip 和 $top 的。

$skip, $top 只取一部分数据出来,假如我们想知道在没有 $skip, $top 的情况下总数是多少条,那就可以使用 $count

/api/v1.0/projects?$count=true&$skip=10&$top=10

效果

response data 多了一个属性 "@odata.count"

$orderby

/api/v1.0/projects?$orderby=name

$orderby 就是依据 property value 排序。

默认是 ascending,要 descending 就加空格 desc

/api/v1.0/projects?$orderby=name desc

想 order by multiple property 就用逗号做分割

/api/v1.0/projects?$orderby=id desc, name asc

先 order by id descending then by name ascending ("asc” 不写也可以,默认就是 "asc")

$expand

$expand 的作用是额外输出 related entity,比如

public class Product
{
public string Name { get; set; } = "";
public List<Color> Colors { get; set; } = [];
} public class Color
{
public Product Product { get; set; } = null!;
public string Name { get; set; } = "";
public List<Size> Sizes { get; set; } = [];
} public class Size
{
public Color Color { get; set; } = null!; public string Name { get; set; } = "";
}

Product, Color, Size 相互都有关联。

/products?$expand=colors

效果

它还可以嵌套哦

/products?$expand=colors($expand=sizes)

效果

嵌套 $expand 还可以搭配其它 operator 使用

$expand=colors($select=id, name;$orderby=id desc)

用分号 “;” 做分割。

$filter

$filter 用于过滤数据

/api/v1.0/products?$filter=name eq 'abc'

上面这句的意思是只输出 property name 等于 "abc" 的 entities。

eq 是 equal 的缩写

‘abc’ 需要用 quote 符号框起来。假如碰巧 compare 的 value 内包含 quote 那需要 encode 把 single quote (') 变成 double single quote (''),注:不是 double quote 而是 double single quote 哦

compare 的 operator 有非常的多,常见的:

  1. not equal

    name ne 'abc'

  2. greater than

    price gt 100 (注:只有 string 需要 quote)

  3. less than

    price lt 100

  4. greater than or equal to

    price ge 100

  5. less than or eqaul to

    price le 100

  6. startswith

    startswith(name, 'abc')

  7. endswith

    endswith(name, 'abc')

  8. contains

    contains(name, 'abc')

另外,表达式也支持 and, or, 括弧

$filter=(id gt 1 and id lt 2) or name eq 'abc'

等价于 LINQ

products.Where(p => (p.Id is > 1 and < 10) || p.Name == "x")

另外,$filter 也可以 filter related entity property

/api/colors?$filter=product/name eq 'abc'

等价于 LINQ

colors.Where(c => c.Product.Name == "abc")

$apply, groupby, aggregate

groupby 长这样

/api/v1.0/products?$apply=groupby(
(prop1, prop2),
aggregate(
prop1 with sum as sumProp1,
prop2 with average as aveProp2,
$count as count,
prop3 with countdistinct as prop3DistinctCount
)
)

我们一句一句看

(prop1, prop2) 表达要 group by 依据哪些 properties,支持 group by multiple property。

group by 以后需要 aggregate 做 sum, average , max, min 等 operator。

prop1 with sum as sumProp1 就是把 prop1 sum 起来,然后以 property name "sumProp1" 作为输出。

$count 就是 group 之后的 count 咯

countdistinct 是针对指定 property distinct value 后的 count。

例子:

/api/products

效果

group by category sum price

/api/products?$apply=groupby((category), aggregate(price with sum as sumPrice))

效果

OData – 基础语法 Basic的更多相关文章

  1. javascript基础语法——词法结构

    × 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ...

  2. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  3. VB execl文件后台代码,基础语法

    Excel宏与VBA 程序设计实验指导1 实验1 Excel宏与VBA 语法基础 一.实验目的 1.熟练掌握录制宏.执行宏.加载宏的方法: 2.熟练使用Excel VBA编辑环境,掌握VBA的编辑工具 ...

  4. Pytorch学习笔记(一)---- 基础语法

    书上内容太多太杂,看完容易忘记,特此记录方便日后查看,所有基础语法以代码形式呈现,代码和注释均来源与书本和案例的整理. # -*- coding: utf-8 -*- # All codes and ...

  5. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  6. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  7. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  8. emmet 系列(1)基础语法

    emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...

  9. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  10. Java基础语法

    java基础学习总结——基础语法1 一.标识符

随机推荐

  1. 基于 Impala 的高性能数仓建设实践之虚拟数仓

    导读:本文主要介绍网易数帆 NDH 在 Impala 上实现的虚拟数仓特性,包括资源分组.水平扩展.混合分组和分时复用等功能,可以灵活配置集群资源.均衡节点负载.提高查询并发,并充分利用节点资源. 接 ...

  2. 直播预告:Service Mesh 技术在美团的落地和挑战

    一场突如其来的疫情加深了企业对数字化转型升级的渴望,作为新兴数字化业务的基础,云原生技术的价值日益凸显.当前,越来越多的企业逐步引入容器.微服务/Service Mesh 技术改造业务,实现数据库.P ...

  3. oeasy教您玩转vim - 2 - # 使用帮助

    回忆上节课内容 更新和运行 vim 进入和退出 vim 存活了下来 从中我们知道 vim 有两种模式:正常模式(Normal mode)和命令行模式 (Command-Line mode) 为了您能更 ...

  4. vue项目坑记录:vue项目运行卡在百分之几几几

    今天晚上打着游戏,同事突然叫我拉项目下来运行,我打完就去拉代码了,结果vue项目运行卡在66%不动了,我也是百度一下分享别人怎么解决的文章给他,继续我的游戏! 结果呢? 游戏结束后,我拉代码,还是这个 ...

  5. LeetCode102.二叉树的层序遍历

    LeetCode题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/submissions/548489149/ 题 ...

  6. 整段 html实现其中的每一个 a 标签跨域下载操作 window.URL.createObjectURL(blob)

    window.URL.createObjectURL(blob) a 标签下载问题,通常在 a 标签中加上download属性,就可完成对href属性链接文件的下载,但仅仅是限于同源文件,如果是非同源 ...

  7. Python获取指定网段正在使用的IP

    Python获取指定网段正在使用的IP #!/usr/bin/env python # -*- coding: utf-8 -*- ''''' 使用方法样例 python test20.py 192. ...

  8. 【转载】 tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/huitailangyz/article/ ...

  9. 【转载】 Docker-关于docker cpu的限制后,实际效果的研究

    原文地址: https://zhuanlan.zhihu.com/p/46275332 ================================================== 思考:我们 ...

  10. 国产操作系统——银河麒麟V10 SP1使用小结

    前几天看新闻国产操作系统银河麒麟有了新的更新于是上手搞了一个. ========================================================= 该系统自带驱动,其中 ...