EF Core MySQL Contains(variable) like 运算符

3
我正在使用ASP.NET Web API Core和EF Core创建一个方法,该方法返回JSON格式的记录。
当我在like操作符(%varible%)中使用contains时,会出现以下错误信息:

在Microsoft.EntityFrameworkCore.dll中发生了“MySql.Data.MySqlClient.MySqlException”类型的异常,但未在用户代码中处理

附加信息:您在SQL语法中有一个错误;请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方法'+ '%'

ORDER BY p.StoreId, p.CategoryId' 在第4行

似乎%符号之一不在正确的位置。
我检查了我的代码和原始的SQL输出,但没有看到任何问题。
希望有人能帮助我!
var query = from p in db.Products
            join c in db.ProductCategory
                   on new { p.StoreId, p.CategoryId } equals new { c.StoreId, c.CategoryId } into pc
            from c in pc.DefaultIfEmpty()
            where (p.ProductName.Contains("a"))
            select p;  

query.ToList()

原始SQL

SELECT `p`.`StoreId`, `p`.`ProductId`, `p`.`CategoryId`, `p`.`Description`, `p`.`ImagePath`, `p`.`ProductName`, `p`.`SalesPeriodFrom`, `p`.`SalesPeriodNeverEnd`, `p`.`SalesPeriodTo`, `p`.`SalesUnit`, `p`.`UnitPrice`, `c`.`StoreId`, `c`.`CategoryId`, `c`.`CategoryName`
FROM `Products` AS `p`
LEFT JOIN `ProductCategory` AS `c` ON (`p`.`StoreId` = `c`.`StoreId`) AND (`p`.`CategoryId` = `c`.`CategoryId`)
WHERE `p`.`ProductName` LIKE ('%' + 'a') + '%'
ORDER BY `p`.`StoreId`, `p`.`CategoryId`

Windows 7 Professional x64
Visual Studio 2015 Professional
MySQL 5.6.17

Microsoft .NET Core 1.0.1
带依赖项

   "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
   "Microsoft.AspNetCore.Mvc": "1.0.1",
   "Microsoft.AspNetCore.Routing": "1.0.1",
   "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
   "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
   "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
   "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
   "Microsoft.Extensions.Configuration.Json": "1.0.0",
   "Microsoft.Extensions.Logging": "1.0.0",
   "Microsoft.Extensions.Logging.Console": "1.0.0",
   "Microsoft.Extensions.Logging.Debug": "1.0.0",
   "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
   "MySql.Data.EntityFrameworkCore": "7.0.5-IR21",
   "System.Linq.Dynamic.Core": "1.0.6.6"

你尝试过将其设置为可查询的,然后应用where谓词吗? - H. Herzl
我有同样的问题,你找到解决方案了吗? - shahaf
1个回答

2

我发现将 MySql.Data.EntityFrameworkCore 从 "7.0.6-IR31" 更改为 "6.10.0-alpha" 将导致有效的 SQL 语法。

6.10.0-alpha 是更新版本。

然而,另一个问题出现了。请看这里。

在 linq contains 中使用来自方法参数的参数

我认为只有等待更新修复错误是无可选择的。


谢谢。它解决了我的问题。 - Jonas T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接