如何在 C# 中解析 Odata 过滤器字符串?

How to parse an Odata filter string in C#?

我正在尝试在 Azure table 存储中执行 table 操作,以根据提供的过滤器检索实体。我允许用户在文本框中输入过滤器。

我需要在将过滤器字符串发送到 Azure 之前对其进行解析。我该怎么做?是否有预定义的方法或包可以执行解析此过滤器字符串?或者我必须手动编写正则表达式来执行此解析?

这是我的 Table 操作,之前没有进行任何解析。

var myFilterString = "PartitionKey eq '2' and ((PartitionKey eq '1' and RowKey eq '100') or RowKey eq '3')";
var entities = cloudTable.ExecuteQuerySegmented(new TableQuery().Where(myFilterString)).ToList();

提前致谢。

不,没有这种方法。这完全取决于它的设计方式。

  • 查询通过 http 生成 api 调用。这意味着库不知道您的模式是否存在。它不知道你的分区键以及它们是否正确

  • 检查下面的例子

var query = new TableQuery<SymmetricKey>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "SymmetricKey"));

这里的库显然是为了简化 http 调用的创建,仅此而已。

  • 将查询的创建委托给您的用户总是一个坏主意。

这几乎从未发生过,因为您无法控制用户的行为。相反,创建一个包含一些 html 的选项列表,并根据用户的输入创建比较,而不是自由文本输入选项。