有没有办法将 PredicateBuilder 与 Azure 表存储一起使用?
Posted
技术标签:
【中文标题】有没有办法将 PredicateBuilder 与 Azure 表存储一起使用?【英文标题】:Is there a way to use PredicateBuilder with Azure Table Storage? 【发布时间】:2013-11-08 19:25:57 【问题描述】:正如它在锡上所说的那样,我有一个设计问题,通常 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 运行它?
【问题讨论】:
【参考方案1】:简短的回答:不。 ATS 仅提供有限的 linq 支持。
【讨论】:
您有相关文档的链接吗? 以下是 ATS 支持的所有内容:msdn.microsoft.com/en-us/library/windowsazure/dd135725.aspx 嘿,伊戈尔,连个问候都没有?!我知道 Azure 的语法有限,但我希望我可以通过表达式/谓词构建查询(在该语法的范围内),以便我可以更动态地构建查询。【参考方案2】:是的,您可以将 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()
的使用 - 这是因为我在提供重复项时出错。
【讨论】:
以上是关于有没有办法将 PredicateBuilder 与 Azure 表存储一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
将 LinqKit PredicateBuilder 用于相关模型(EF Core)
Entity Framework 4.1 Code First - 使用 LinqKit PredicateBuilder 时忽略包含
如何使用 PredicateBuilder、EF Core 5 和 Postgresql 10+ 执行不区分大小写和重音的 LIKE(子字符串)查询?