如何在C#中使用正则表达式解析OData $ filter? [英] How to parse OData $filter with regular expression in C#?
问题描述
我想知道最好的方法是例如在C#中解析OData $ filter字符串
Hi I'm wondering what the best approach would be to parse an OData $filter string in C#, for example
/API/organisations?$ filter ="name eq'Facebook'或name eq'Twitter'和订户gt'30'"
/API/organisations?$filter="name eq 'Facebook' or name eq 'Twitter' and subscribers gt '30'"
应返回所有拥有30个以上订户的名称为Facebook或Twitter的组织.我已经研究了很多,但是找不到任何围绕WCF的解决方案.我当时在考虑使用正则表达式并将其分组,所以我有一个列表 的过滤器类,例如:
Should return all organisations with a name of Facebook or Twitter and who have more than 30 subscribers. I've researched quite a bit but can't find any solutions which don't revolve around WCF. I was thinking of using Regex and grouping them so I have a list of Filter classes such that:
Filter
Resource: Name
Operator: Eq
Value: Facebook
Filter
Resource: Name
Operator: Eq
Value: Twitter
Filter
Resource: Subscribers
Operator: gt
Value: 30
但是我对如何处理AND/OR感到困惑.
but I'm stumped as how to handle ANDs / ORs.
推荐答案
.NET中有一个可用的库可以为您完成此操作.编写自己的正则表达式可能会丢失一些极端情况.
In .NET, there's a library available that will do this for you. Writing your own regex runs the risk of missing some edge case.
使用NuGet,引入Microsoft.Data.OData.然后,您可以执行以下操作:
Using NuGet, bring in Microsoft.Data.OData. Then, you can do:
using Microsoft.Data.OData.Query;
var result = ODataUriParser.ParseFilter(
"name eq 'Facebook' or name eq 'Twitter' and subscribers gt 30",
model,
type);
result
在这里将以AST的形式表示filter子句.
result
here will be in the form of an AST representing the filter clause.
(要获取model
和type
输入,您可以使用以下方法解析$ metadata文件:
(To get the model
and type
inputs, you could parse your $metadata file using something like this:
using Microsoft.Data.Edm;
using Microsoft.Data.Edm.Csdl;
IEdmModel model = EdmxReader.Parse(new XmlTextReader(/*stream of your $metadata file*/));
IEdmEntityType type = model.FindType("organisation");
)
这篇关于如何在C#中使用正则表达式解析OData $ filter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!