【发布时间】:2020-12-01 01:01:10
【问题描述】:
在我的 cosmos 存储中,我的项目有一组关键字。 我想做一个查询,它可以过滤列表中至少有一个关键字的项目。
我尝试了 Intersect 方法:
query = query.Where(x => x.Keywords.Intersect(research.Kewords).Any())
但我得到了异常“不支持方法'相交'”
所以我尝试了 PredicateBuilder 方法:
var pred = PredicateBuilder.False<Item>();
foreach (var k in research.Keywords)
pred = pred.Or(x => x.Keywords.Contains(k));
query = query.Where(pred);
但我得到了异常“不支持使用 NodeType 'Invoke' 的表达式”
这是我的谓词生成器:
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
有没有办法在 Cosmos 中实现这一点?或者我必须在查询结果之后进行过滤?
【问题讨论】:
标签: c# azure-cosmosdb