因此,您可以使用以下内容动态构建查询(取自PhluffyFotos示例):
Expression<Func<PhotoTagRow, bool>> search = null;
foreach (var tag in tags)
{
var id = tag.Trim().ToLowerInvariant();
if (String.IsNullOrEmpty(id))
{
continue;
}
Expression<Func<PhotoTagRow, bool>> addendum = t => t.PartitionKey == id;
if (search == null)
{
search = addendum;
}
else
{
search = Expression.Lambda<Func<PhotoTagRow, bool>>(Expression.OrElse(search.Body, addendum.Body), search.Parameters);
}
}
现在,一旦你有了“搜索”,你就可以将它作为谓词传递给你的 Where 子句。
但是,我想说服你不要这样做。我正在回答您的问题,但告诉您执行多个 '|' 是个坏主意 表存储中的 OR 子句。原因是至少在今天,这些查询无法优化,它们会导致全表扫描。对于任何不平凡的数据量,性能将是可怕的。此外,如果您像这样动态地构建您的谓词,您将面临破坏 URL 限制的风险(请记住这一点)。
PhluffyFotos 中的这段代码展示了如何,但这实际上是一种不好的做法(我知道,我写了它)。它确实应该被优化为分别并行运行每个 OR 子句。这才是你真正应该做的。AND 子句可以,但 OR 子句应该并行化(使用 PLINQ 或 TPL)并且您应该汇总结果。它会快得多。
HTH。