使用linq中包含的方法參數的參數

.net-core entity-framework-core mysql-connector

我有一個問題使用Contains()來自方法參數的參數的Contains()方法。

我正在使用實體框架核心1.1和mysql連接器版本6.10.0-alpha。

我有這個代碼:

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)返回以下錯誤:

失敗:Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [0]執行請求時發生未處理的異常System.InvalidOperationException:從'VisitChildren'調用時,重寫類型為'System.Linq.Expressions.Expression'的節點必須返回非-null相同類型的值。或者,覆蓋“VisitChildren”並將其更改為不訪問此類型的子項。

在Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension的Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.VisitChildren(ExpressionVisitor visitor)上的System.Linq.Expressions.ExpressionVisitor.VisitAndConvert [T](ReadOnlyCollection'1 nodes,String callerName) (表達式節點)位於Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.VisitChildren的Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit(Expression node)中的Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.Accept(ExpressionVisitor visitor)。 (ExpressionVisitor訪問者)位於Microsoft.EntityFrameworkCore.Expression.ExpressionVisitors.Expression上的Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.Accept(ExpressionVisitor visitor)中的Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension(Expression node).ConternalRemovingExpressionVisitor.Visit (表達式節點)在Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel)的Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection'1 bodyClauses,QueryModel queryModel)上的Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitWhereClause(WhereClause whereClause,QueryModel queryModel,Int32 index) 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)---從拋出異常的先前位置開始的堆棧跟踪結束---

為什麼我不能使用Contains() linq表達式中的方法參數的參數?

我能做些什麼才能使用呢?

一般承認的答案

版本6.10.1中正式修復的錯誤: https//www.nuget.org/packages/MySql.Data/6.10.1-beta

https://bugs.mysql.com/bug.php?id=84505

[2月9日21:17] Christine Cole

由開發者發布:

修復了即將發布的MySQL Connector / NET 6.10.1版本,這裡是changelog條目:

EF Core:在帶有變量的表達式中使用Contains方法生成異常。

謝謝你的錯誤報告。

這是官方發布的帖子:

http://insidemysql.com/mysql-connectornet-6-10-1-beta-has-been-released/

錯誤修復

  • EF Core:在帶有變量的表達式中使用Contains方法生成異常。 (Bug#25394204,Bug#84505)

熱門答案

顯然這是一個真正的錯誤,而不是我在實體框架的工作方式中理解的東西。

我們在實體框架的github問題板上開始討論它:

在謂詞內部使用Contains時生成錯誤的查詢。 #6687 https://github.com/aspnet/EntityFramework/issues/6687#issuecomment-272543460

然後它分支到mysql錯誤論壇:

錯誤#84505在表達式中使用包含方法的變量在EF Core中引發異常 http://bugs.mysql.com/bug.php?id=84505

以及實體框架的github問題板中的新專用問題:

查詢:有條件刪除訪問者和sql函數的可能錯誤#7441 https://github.com/aspnet/EntityFramework/issues/7441

希望很快得到解決。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow