1

我正在尝试创建一个通用方法来仅读取 azure table 的某些属性。创建这个我使用 TableQuery,但有些我无法通过过滤条件

public  IEnumerable<T1> ExecuteQuery<T, T1>(Expression<Func<T,bool>> predicate)
        where T : TableEntity, IDomainData, new()
        where T1 : new()
    {

        Type typeParameterType = typeof(T);
        CloudTable tableReference = tableClient.GetTableReference(typeParameterType.Name);


        var query = new TableQuery<T>()
        {
           FilterString = predicate.Body.ToString(),
           SelectColumns = typeof(T1).GetListOfPropertyNames()
        };
        query = query.Where(predicate).AsTableQuery(); ==> Throws error Object reference error


        return tableReference.ExecuteQuery(query) as List<T1>;

        //return tableReference.ExecuteQuery<T, T1>(query,EntityAdapter.AdapterResolver<T1>);

    }

是否有将 Filterstring 传递给 TableQuery 并使用 azure table 实例执行 TableQuery 的地方

4

1 回答 1

1

如果您尝试从表中获取属性的子集以及过滤条件,则必须使用 Select 和 Where 子句指定它,如下所示 -

TableQuery<T> query = new TableQuery<T>().Select(new List<string>() { "prop1", "prop2" }).Where("filter string");
List<T> result = currentTable.ExecuteQuery(query).ToList();

此外,存储客户端库中还有一些辅助方法可用于构造过滤器字符串。请参阅 TableQuery.GenerateFilterCondition。

于 2014-10-29T18:03:40.993 回答