我有一个简单的语句来从我的mySQL数据库中获取数据,但它收到以下错误:
[MySqlException(0x80004005):未知列' Project2.Name'在'哪里 子句'] MySql.Data.MySqlClient.MySqlStream.ReadPacket()+272
MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64的&安培; insertedId)+68
MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId,Int32& affectedRows,Int64& insertedId)+17
MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId,Boolean force)+110 MySql.Data.MySqlClient.MySqlDataReader.NextResult() +761 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior) 行为)+1557
MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(的CommandBehavior 行为)+33
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand) entityCommand,CommandBehavior行为)+435
声明:
using (myEntities ctx = new myEntities())
{
var Result = ctx.Items.Where(x => x.Contact.Country == Country)
.GroupBy(p => p.Name).Where(x => !x.Any(y => y.Value == "X"))
.Select(g => g.OrderByDescending(p => p.Date).FirstOrDefault()) //<- Error
.Select(g => g.FirstOrDefault()) // <- no Error
.ToList();
}
当我使用第一个Select
时,我得到了这个错误,第二个,代码运行正常。谁知道原因?
找到相同的错误here
答案 0 :(得分:3)
让我们看看。您有一个完全有效的LINQ to Entities查询,它适用于SqlServer提供程序,不适用于MySQL提供程序。对我来说听起来像一个MySQL提供程序错误,它可能是什么?但是哪一个?我不知道这有什么帮助,但是我在#78610(由ASP MVC MsSql to MySQL migration SO帖子发起)下注,标记为#76663的副本。或#77543等。
因此,MySQL连接器在子查询中存在OrderBy
的问题。作为一种解决方法,我可以建议(在可能的情况下)实现MaxBy
的替代方法,即(在伪代码中)而不是seq.OrderByDescending(col).FirstOrDefault()
使用有效的seq.FirstOrDefault(col == seq.Max(col))
模式:
var Result = ctx.Items
.Where(x => x.Contact.Country == Country)
.GroupBy(p => p.Name)
.Where(g => !g.Any(x => x.Value == "X"))
.Select(g => g.FirstOrDefault(e => e.Date == g.Max(e1 => e1.Date)))
.ToList();
答案 1 :(得分:1)
分组前排序。查询提供程序只能翻译有限数量的表达式树,而您拥有它的方式显然就是其中之一。首先排序将具有相同的行为。
var query = ctx.Items
.Where(x => x.Contact.Country == Country)
.OrderByDescending(x => x.Date)
.GroupBy(p => p.Name)
.Where(g => !g.Any(x => x.Value == "X"))
.Select(g => g.FirstOrDefault());
答案 2 :(得分:0)
您可以捕获代码生成的SQL,请参阅https://stackoverflow.com/a/20751723/3572241以及该问题的其他答案。
然后尝试在mysql中运行SQL以隔离问题。