1

ファンドのデータ値を含むこのテーブルがあり、各ファンドの最新の値(FundId)を選択したいと思います。このクエリを実行すると問題が発生します。「指定された方法はサポートされていません」。

var q = from f in ctx.FundDatas
group f by f.FundId into g
let latestDataItem = g.OrderByDescending(r => r.DateOfValue).FirstOrDefault()
select new { 
    g.Key, LatestDataItem = latestDataItem 
};
var list = q.ToList(); //Executed and exception is thrown

なぜこの注文は仕事ではないのですか?KeyとDateOfValueだけを取得したくない場合は、「let」の部分をスキップして、次のように選択します

select new { 
    g.Key,
    LatestDateOfValue = g.Max(y=>y.DateOfValue)
};

上記は機能します...しかし、最大日だけでなく、各ファンドデータ項目の最新のオブジェクト全体が必要です。

内部例外スタックトレースは次のとおりです。

[NotSupportedException: Specified method is not supported.]
MySql.Data.Entity.SqlGenerator.Visit(DbApplyExpression expression) +28
System.Data.Common.CommandTrees.DbApplyExpression.Accept(DbExpressionVisitor`1 visitor)     +25
MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name,      TypeUsage type) +35
MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +38
System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +25
MySql.Data.Entity.SelectGenerator.GenerateSQL(DbCommandTree tree) +60
MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) +376
System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) +125
System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +442

.NETコネクタ6.5.4.0でMySQLを実行しています。

編集:テーブル定義:

FundId      int(6), PK
DateOfValue date, PK
Value       double(12,6)
4

1 に答える 1

0

メソッドの接続のx.5.4バージョンには既知のバグがありますFirstOrDefault()

http://bugs.mysql.com/bug.php?id=67377を参照してください

While executing the following LINQ. It used to work in the version 6.3.5:
 entities.Reclamation.Where(x=> x.idUser == idUser).Select(x=> new {
    id = x.id,
    ReclamationReport = x.Report.Count == 0 ? null : x.Report.FirstOrDefault().id
    });

これが問題の原因であるかどうかはわかりません。バグレポーターがあなたと同じパターンを使用しているようには見えないためです(ただし、私のLinqはスクラッチに対応していないため、私が問題であるかどうかさえわかりません。リンゴとリンゴの比較)、そして例外は暗黙の意味で類似していますが、それは同一ではありません(ただし、v6.6.4でバグが報告されているため、v6.5.4で見られるものとの微妙な違いを説明している可能性があります)。

6.5.4に適用されるリリースについては、このメンテナンスリリースの記事を参照してください。

https://blogs.oracle.com/MySqlOnWindows/entry/mysql_connector_net_6_55

一部のLINQtoEntitiesクエリでサポートされていないメソッドFirstOrDefaultの修正(MySqlバグ#67377、Oracleバグ#15856964)。

したがって、メンテナンスリリースを適用することをお勧めします。

于 2013-03-25T08:00:19.350 に答える