【发布时间】:2022-11-23 07:41:17
【问题描述】:
我正在努力处理表达式树和 Entity Framework Core。
我有一个方法返回我将用于过滤的表达式树,例如:
public Expression<Func<E, bool>> GetWherePredicate<E>(Func<E, NpgsqlTsVector> selector, string queryText)
{
return entity => selector(entity).Matches(queryText);
}
然后我想用类似的东西调用这个方法:
query = query.Where(GetWherePredicate<MyEntity>(i => i.MySearchField, "the_query"));
这会产生一个错误,类似于:
System.InvalidOperationException:LINQ 表达式 'DbSet()
.Where(i => 调用(__selector_0, i)
.Matches(__queryText_1))' 无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。虽然我明白为什么这不起作用,但我不确定如何解决这个问题,但怀疑它与使用表达式树有关。我想创建一个具有以下签名的新函数,例如:
Expression<Func<E, bool>> GetWherePredicate<E>(MemberExpression selectorForSearchField, string queryText);但我无法弄清楚如何采用该表达式并应用
Matches函数。任何帮助表示赞赏。
谢谢, 埃里克
【问题讨论】:
标签: .net-core entity-framework-core expression-trees npgsql