Azure.Data.Tables QueryAsync 过滤在多个过滤条件下出错

问题描述 投票:0回答:0

在旧的 SDK Azure 表中,您可以创建 FilterConditions,如下所示

var partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, symbolRoot);
    var startDateFilter =
        TableQuery.GenerateFilterConditionForDate("TradeDate", QueryComparisons.GreaterThanOrEqual, startDate);
    var endDateFilter =
        TableQuery.GenerateFilterConditionForDate("TradeDate", QueryComparisons.LessThanOrEqual, endDate);

    var filter = TableQuery.CombineFilters(
        TableQuery.CombineFilters(
            partitionFilter,
            TableOperators.And,
            startDateFilter),
        TableOperators.And, endDateFilter);

我希望能够继续这种模式,但是......

在新的 Azure.Data.Tables SDK 中发生了很多变化 我看不到创建过滤器的方法,即使 QueryAsync 方法接受过滤器作为参数。

此方法失败,因为过滤中显然不支持 DateTime 转换

public async Task<List<EquityDataEntity>> GetEquityPriceDataXDaysBackAsync(string symbol, int daysBackFromToday)
{
    if (daysBackFromToday > 0)
    {
        daysBackFromToday *= -1; // put it proper form for Add... method
    }
    var data = await TableClient!
        .QueryAsync<EquityDataEntity>(u => u.PartitionKey == symbol.ToUpper()
                                  && Convert.ToDateTime(u.RowKey) >= DateTime.Now.AddDays(daysBackFromToday))  
        //Yes, unfortunately the RowKey is the date
        .ToListAsync();

    return data;
}

“不支持 ToDateTime 方法。”

我的两个问题是:

  1. 有没有一种方法可以像之前的 SDK 那样在方法之外生成过滤器以在方法内使用?

  2. 如果上述方法不可行,我如何在查询方法中完成日期比较?

azure azure-table-storage azure-tablequery
© www.soinside.com 2019 - 2024. All rights reserved.