3

正如它在锡上所说的那样,我有一个设计问题,通常 PredicateBuilder 将是显而易见的答案,但是在执行时,我得到了以下错误:

The expression 
((([10007].PartitionKey == "df2907ad-2094-4b7a-9796-d077f14b25bc") 
And True) 
And Invoke(f => (True AndAlso Invoke(job => (job.MigrationExecutionId == "5fa0bd4c-4745-4452-8e52-a0329c00dafb"), f)), [10007])) 
is not supported.

有什么方法可以使用 Predicate builder 或其他形式的表达式树语法来构建查询并针对 Azure Table 运行它?

4

2 回答 2

1

简短的回答:没有。ATS 仅提供有限的 linq 支持。

于 2013-11-09T03:05:31.503 回答
0

是的,你可以将PredicateBuilder与 Azure 表存储一起使用。假设您要构建格式的查询(伪代码):

where partitionkey = "X" and (email = "Y" or email = "Z")

这可以按如下方式完成

    public string[] GetByEmail(string companyId, string[] emails)
    {
        var inner = PredicateBuilder.New<IssuerTableEntity>(false);
        foreach (var email in emails.Select(x => x.ToLowerInvariant()).Distinct())
        {
            var temp = email;
            inner = inner.Or(x => x.EmailLowercase == temp);
        }

        var outer = PredicateBuilder.New<MyTableEntity>(false);
        outer = outer.And(x => x.PartitionKey == companyId);
        outer = outer.And(inner);

        CloudTable table = GetTable(MyTableName);  
        return table.CreateQuery<MyTableEntity>()
            .Where(outer)
            .Select(x => x.RowKey)
            .ToArray();
    }

注意使用Distinct()- 这是因为我在提供重复项时出错。

于 2017-06-04T16:02:24.130 回答