【发布时间】:2021-10-23 23:12:24
【问题描述】:
我已经看过以下问题,但它并没有太大的吸引力,问题仍未解决。 How to combine (OR) two expression trees
你如何or-连接两个Expression<Func<T, bool>>。
让我们考虑最简单的情况:
var fulltext = "some text";
private Expression<Func<User, bool>> FulltextSearch(string fulltext) {
Expression<Func<User, bool>> left = t => t.Name.Contains(fulltext)
Expression<Func<User, bool>> right = t => t.Description.Contains(fulltext)
return Expression.Lambda<Func<Task, bool>>(Expression.Or(left.Body, right.Body), left.Parameters);
}
var users = dbContext.Users
.Where(FulltextSearch("name xy"))
.ToList();
这是一个简化的例子!
这以错误结束
System.InvalidOperationException: The LINQ expression 'DbSet<User>()
.Where(t => t.Name.Contains(__fulltext_0) | t.Description.Contains(__fulltext_0))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'...
但是您可以像这样轻松编写此查询并且它可以工作:
var users = dbContext.Users
.Where(u => u.Name.Contains(fulltext) || u.Description.Contains(fulltext))
.ToList()
那么如何将两个 Expression
【问题讨论】:
-
您在使用针对您链接的问题提供的解决方案时遇到了什么问题?
标签: c# linq entity-framework-core