我有这个表有基金数据值,我想选择每个基金的最新值(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)
答案 0 :(得分:0)
FirstOrDefault()
方法的x.5.4版本连接中存在已知错误。
参考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 bug#67377,Oracle bug#15856964)。
所以,我建议应用维护版本。。