无需EDM模型,求支持IN的OData URI转原生SQL解析库
问题:寻找无需依赖EDM模型的OData查询转原生SQL库
现有示例OData URI:
https://web.com.pl/api/ControlerName?$filter=(Sn%20eq%2011223344%20and%20Id%20in%20(1,2,3)%20and%20Time%20ge%202024-03-23T22:00:00.000Z%20and%20Time%20lt%202024-04-24T19:00:59.999Z)&$orderby=Time%20asc&$count=true&$top=20&$skip=0
目前已能用Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query)拆分出$filter、$select、$count等独立参数,但无法直接生成类似如下的SQL语句:
SN = 112233 and ID in (1,2,3) and Time >= '2024-03-23T22:00:00.000Z' and Time < '2024-04-24T19:00:59.999Z' order by Time asc
曾找到一款相关库,但它不支持IN操作符,现寻求支持IN操作、无需依赖EDM模型的OData转SQL工具。
可行方案
- ODataQueryToSql:轻量级工具,支持解析$filter、$orderby、$top、$skip等常用OData参数,无需EDM模型依赖,原生支持IN操作符,可直接生成标准SQL片段,适配多数主流关系型数据库。
- SqlKata.OData:基于SqlKata SQL构建器的扩展组件,能将OData查询参数转换为SqlKata的查询对象,再生成原生SQL。该工具不依赖EDM模型,支持所有常见OData操作符(包括IN),还能灵活调整SQL生成规则。
- 自定义解析逻辑:若现有库无法满足特定需求,可基于
Microsoft.AspNetCore.OData.Query中的解析组件(如ODataQueryOptions)自行开发转换逻辑:先将$filter解析为表达式树,再遍历表达式树将其转换为对应的SQL片段。这种方式自由度最高,可完全适配自定义业务场景。
内容的提问来源于stack exchange,提问作者blane
相关产品推荐
相关产品推荐

