C# LINQ查询,使用group by选择最新值-不支持的方法

C# LINQ查询,使用group by选择最新值-不支持的方法,c#,mysql,.net,linq,C#,Mysql,.net,Linq,我有一个包含基金数据值的表,我想为每个基金ID选择最新的值。 这个查询在执行时给了我一些问题。不支持指定的方法 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 = latestDataIt

我有一个包含基金数据值的表,我想为每个基金ID选择最新的值。 这个查询在执行时给了我一些问题。不支持指定的方法

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 connector 6.5.4.0运行MySQL

编辑: 表定义:

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

FirstOrDefault方法的x.5.4版本的连接中有一个已知的bug

提及

我不确定这是否是您的问题的原因,因为bug reporter似乎没有使用与您相同的模式,尽管我的Linq没有达到标准,所以我甚至不知道我是否在比较苹果和苹果,尽管异常在暗示意义上是类似的,但在v6.6.4中报告的bug并不相同,因此,这可能解释了与v6.5.4中所看到的细微差别

有关适用于6.5.4的版本,请参阅本维护版本文章:

修复某些LINQ to实体查询MySql错误67377、Oracle错误15856964中不支持的方法FirstOrDefault


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

我有一个包含基金数据值的表-哪个表?你的意思是要包含一个表定义吗?在这里,添加了表定义。这是一个非常简单的表,FundId和DateOfValue一起作为键,然后实际值作为双精度。对不起,我不是说需要它,只是看起来好像你打算包含它。谢谢!我试着更新到最新的GA版本,效果很好。然而,我直接遇到了其他问题。“where子句”中的未知列“Extent1.FundId”。现在我在LinqPad中测试了我的LINQ查询,它工作得非常好。mysql连接器或我的项目一定出了什么问题。@Andreas,我的好朋友。谢谢你的接受!我有一段很好的支持和挖掘这类事情的历史。听起来有好消息也有坏消息。。。我没有从.NET使用mySql的实际经验,Linq也很无知,对不起。。。因此,我建议您提出一个新问题,详细说明您的新问题,并使用正确的标题和标签,您将获得此新问题所需的帮助。祝你好运!
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
    });