How to parse OData $filter with regular expression in C#?

前端 未结 3 1775
误落风尘
误落风尘 2020-12-05 05:47

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\' or name eq \'

3条回答
  •  星月不相逢
    2020-12-05 06:25

    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.

    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 here will be in the form of an AST representing the filter clause.

    (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");
    

    )

提交回复
热议问题