寻求将OData查询转换为Power Query M表达式的C#可用库
OData查询转Power Query M表达式的C#方案
目前没有专门的成熟C#库可以直接完成OData查询到Power Query M表达式的转换,不过可以通过以下几种方式实现需求:
基于OData官方.NET库解析+自定义代码生成
使用Microsoft.OData.Core库(NuGet可获取)解析OData查询语句,将$select、$filter等子句解析为结构化的对象模型,再根据这些模型生成对应的Power Query M代码。
简单流程示例:- 用
ODataUriParser解析OData查询字符串,得到SelectExpandClause(对应$select)、FilterClause(对应$filter)等结构 - 遍历结构节点,将OData表达式映射为M语言等价逻辑:
- OData的
contains(columnC,'Ma')→ M的Text.Contains([columnC], "Ma") - OData的
$select=columnA,columnB→ M的Table.SelectColumns(..., {"columnA", "columnB"})
- OData的
- 拼接生成完整的M表达式字符串
- 用
利用Power Query内置的OData查询支持
其实Power Query的OData.Feed函数支持直接传入完整的OData查询URL,无需手动编写后续过滤、选列的M代码,示例:let Source = OData.Feed("https://localhost/odata/table?$select=columnA,columnB&$filter=contains(columnC,'Ma')") in Source这种方式会将查询逻辑交给OData服务端处理,效率更高,若无需本地用M函数处理数据,这是更简便的方案。
自定义封装转换逻辑
针对常用OData查询场景,封装映射规则:$filter中的比较运算符(eq/ne/gt等)映射为M的对应运算符- OData文本函数(contains/startsWith等)映射为M的等价文本函数
$orderby映射为Table.Sort
逐步覆盖所需场景,减少手动转换的工作量。
内容的提问来源于stack exchange,提问作者RBG
相关产品推荐
相关产品推荐

