linq内のメソッド引数からパラメータを使用する

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

質問

私は、メソッドの引数から来るパラメータでContains()メソッドを使用して問題があります。

私はエンティティフレームワークコア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行が機能し、

ただし、4行目(bla3)は次のエラーを返します。

失敗:Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [0]要求の実行中に未処理の例外が発生しました。System.InvalidOperationException: 'VisitChildren'から呼び出された場合、 'System.Linq.Expressions.Expression'タイプのノードを書き直すと、同じ型のnull値です。代わりに、 'VisitChildren'をオーバーライドし、このタイプの子どもを訪問しないように変更します。

Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.VisitChildren(ExpressionVisitorビジター)、Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtensionのSystem.Linq.Expressions.ExpressionVisitor.VisitAndConvert [T](ReadOnlyCollection'1ノード、String callerName) (Expressionノード)Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.Accept(ExpressionVisitorビジター)Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit(Expressionノード)Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.VisitChildren (ExpressionVisitorビジター)Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension(Expressionノード)Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.Accept(ExpressionVisitorビジター)at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit ( Remoting.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel(ExpressionModel))で、Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitWhereClause(WhereClause whereClause、QueryModel queryModel、Int32 index)のRemotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection'1 bodyClauses、QueryModel queryModel) Microsoft.EntityFrameworkCore.Query.EntityFrameworkCore.Query.EntityFrameworkCore.Query.EntityFrameworkCore.Query.CreateQueryExecutor [クエリ](QueryModel queryModel)でMicrosoft.EntityFrameworkCore.Query.EntityFrameworkCore.Query.EntityFrameworkCore.Query.EntityFrameworkCore.QueryModel(QueryModel queryModel)でMicrosoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel)例外がスローされた前の場所からのスタックトレースの終了---

なぜContains() linq式の中のメソッド引数からパラメータを使用できないのですか?

それを使用できるように私は何ができますか?

受け入れられた回答

バージョン6.10.1で正式に修正されたバグ: https ://www.nuget.org/packages/MySql.Data/6.10.1-ベータ

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

[9 Feb 21:17] Christine Cole

開発者によって掲示される:

これからのMySQL Connector / NET 6.10.1リリースで修正された、そしてここにchangelogエントリがあります:

EFコア:変数を含む式のContainsメソッドを使用すると例外が生成されました。

バグレポートをありがとう。

ここに公式リリースポストがあります:

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

修正されたバグ

  • EFコア:変数を含む式のContainsメソッドを使用すると例外が生成されました。 (Bug#25394204、Bug#84505)

人気のある回答

明らかに、これは実際のバグであり、エンティティフレームワークの仕組みで私が誤解しているものではありません。

私たちはエンティティフレームワークのgithub issue boardでこれについてここで話を始めました:

述部のどこにContainsを使用すると、誤ったクエリ生成が発生する。 #6687 https://github.com/aspnet/EntityFramework/issues/6687#issuecomment-272543460

そして、それはmysqlバグフォーラムに分岐しました:

Bug#84505変数を含む式のContainsメソッドを使用すると、EFコアで例外がスローされる http://bugs.mysql.com/bug.php?id=84505

エンティティ・フレームワークのgithub issue boardの新しい専用の問題にも適用されます。

クエリ:条件付き削除ビジター関数とSQL関数の周囲で発生する可能性のあるエラー#7441 https://github.com/aspnet/EntityFramework/issues/7441

すぐに修正されることを願っています。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ