我有一个接受OData查询的ASP.Net WebAPI服务。我的一个控制器方法接受ODataQueryOptions
实例并将其应用于IQueryable
实例。到现在为止还挺好。一切都按计划进行。
现在,我特别需要从OData查询中获取一个键/值对。例如,如果我指定了两个过滤器(someproperty eq 123 and otherproperty eq 456)
,我如何从原始过滤器中获取一个键/值对?我查看了一些ODataUriParser文档,但它确实很复杂,看起来有些过分。难道没有更简单的方法来获取简单的键/值对,就像我从普通的QueryString那样?
答案 0 :(得分:1)
使用正则表达式有一种简单的方法,您可以将Odata查询过滤器转换为键值对,从此回答中找到正则表达式Here
string strRegex = @"(?<Filter>" +
"\n" + @" (?<Resource>.+?)\s+" +
"\n" + @" (?<Operator>eq|ne|gt|ge|lt|le|add|sub|mul|div|mod)\s+" +
"\n" + @" '?(?<Value>.+?)'?" +
"\n" + @")" +
"\n" + @"(?:" +
"\n" + @" \s*$" +
"\n" + @" |\s+(?:or|and|not)\s+" +
"\n" + @")" +
"\n";
您的替换字符串就像是,
string strReplace = @"${Resource}:${Value},"
为您提供输出,
someproperty:123,otherproperty:456
然后将该字符串转换为KeyValue参数的字典,或者您想要使用它
public Dictionary<String, String> getKeyValue(String input)
{
return input.Split(',').ToDictionary(kv => kv.Split(':').First(), kv => kv.Split(':').Last());
}