gpt4 book ai didi

c# - 如何使用 C# 为 OData 查询中指定的每个过滤器获取一组键/值对?

转载 作者:行者123 更新时间:2023-11-30 17:46:15 24 4
gpt4 key购买 nike

我有一个接受 OData 查询的 ASP.Net WebAPI 服务。我的 Controller 方法之一接受 ODataQueryOptions 实例并将其应用于 IQueryable 实例。到目前为止,一切都很好。一切都按计划进行。

现在,我特别需要从 OData 查询中获取其中一个键/值对。例如,如果我指定了两个过滤器 (someproperty eq 123 和 otherproperty eq 456),我如何从原始过滤器中获取其中一个键/值对?我查看了一些 ODataUriParser 文档,但它确实很复杂而且似乎有些矫枉过正。有没有更简单的方法来获取简单的键/值对,就像我从普通的 QueryString 中获取的那样?

编辑:我已经进行了一些手动字符串解析来完成我需要的,但这显然并不理想。因此,我在这个问题上悬赏。希望有人对此有一个简单的解决方案!

最佳答案

有一种使用正则表达式的简单方法,您可以将 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());

}

关于c# - 如何使用 C# 为 OData 查询中指定的每个过滤器获取一组键/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26393301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com