我有一个使用Contains()
方法的问题,方法参数来自方法参数。linq中使用方法参数的参数包含
我使用实体框架核心1.1和MySQL连接器版本6.10.0-α。
我有这样的代码:
public IEnumerable<Message> search(string content) {
var bla = this.appDbContext.Messages.Where(x => x.Content.Contains("edit")).ToList();
var bla1 = this.appDbContext.Messages.Where(x => x.Content=="edit").ToList();
var bla2 = this.appDbContext.Messages.Where(x => x.Content==content).ToList();
var bla3 = this.appDbContext.Messages.Where(x => x.Content.Contains(content)).ToList();
...
前3行中的作品,
然而,第四行(bla3)返回以下错误:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] An unhandled exception has occurred while executing the request System.InvalidOperationException: When called from 'VisitChildren', rewriting a node of type 'System.Linq.Expressions.Expression' must return a non-null value of the same type. Alternatively, override 'VisitChildren' and change it to not visit children of this type.
at System.Linq.Expressions.ExpressionVisitor.VisitAndConvert[T](ReadOnlyCollection'1 nodes, String callerName) at Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.VisitChildren(ExpressionVisitor visitor) at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension(Expression node) at Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.Accept(ExpressionVisitor visitor) at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.VisitChildren(ExpressionVisitor visitor) at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension(Expression node) at Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.Accept(ExpressionVisitor visitor) at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitWhereClause(WhereClause whereClause, QueryModel queryModel, Int32 index) at Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection'1 bodyClauses, QueryModel queryModel) at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel) at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel) at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel) at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.CreateQueryExecutor[TResult](QueryModel queryModel) --- End of stack trace from previous location where exception was thrown ---
为什么不能我使用Contains()
linq表达式中的方法参数的参数?
我能做些什么来使用它?
这是一个很好的解决方法,然而,正如你写的 - 在大数据的情况下,这将填满内存,并不会很好。 我刚刚写了一个正式答案,指出这是一个真正的bug,并且实体框架的团队和mysql连接器团队都知道它。 – shahaf
很高兴知道。感谢您的评论。我应该删除我的答案吗? –
我找不到删除它的原因,这可能会帮助没有大量数据的人,因此不会有内存问题。谢谢。 – shahaf