正如它在锡上说的那样,我有一个设计问题,通常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构建器或其他形式的表达式树语法来构建查询并针对Azure Table运行它?
答案 0 :(得分:1)
简答:不。 ATS仅提供有限的linq支持。
答案 1 :(得分: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() - 这是因为我在提供重复项时遇到错误。
您可以在Albahari的PrediceBuilder页面here
上阅读更多内容