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

修复了某些 LINQ to Entities 查询中不支持方法 FirstOrDefault 的问题(MySql 错误 #67377,Oracle 错误 #15856964)。

因此,我建议应用维护版本。.

于 2013-03-25T08:00:19.350 回答