如何在C#中使用正则表达式解析OData $ filter? [英] How to parse OData $filter with regular expression in C#?

查看:138
本文介绍了如何在C#中使用正则表达式解析OData $ filter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道最好的方法是例如在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.

(要获取modeltype输入,您可以使用以下方法解析$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆