mysql - EF Core MySQL Contains(variable) like operator

标签 mysql entity-framework entity-framework-core asp.net-core-webapi

我正在使用 ASP.NET Web API Core 和 EF Core 创建一个方法,它返回 JSON 格式的记录。
当我将 contains 用于 like operator (%varible%) 时,出现错误并显示以下消息:

An exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in Microsoft.EntityFrameworkCore.dll but was not handled in user code

Additional information: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+ '%'

ORDER BY p.StoreId, p.CategoryId' at line 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 专业版 x64
Visual Studio 2015 专业版
MySQL 5.6.17

微软 .NET 核心 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"

最佳答案

我发现将 MySql.Data.EntityFrameworkCore 从“7.0.6-IR31”更改为“6.10.0-alpha”将产生有效的 SQL 语法。

6.10.0-alpha 更新。

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

use parameter from method argument inside linq contains

我认为除了等待更新修复错误别无选择。

关于mysql - EF Core MySQL Contains(variable) like operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40308449/

相关文章:

php - 如何使用 php pdo 从 mysql 中具有外键约束的数据库中删除数据

asp.net-mvc - 使用 ToExpando 方法的问题

c# - 如何解决 SqlNullValueException?

c# - 如何在 aspnetcore/entityframeworkcore 中设置命令超时

c# - 在 EF 核心中具有唯一性的备用键和 HasIndex 之间的真正区别是什么?

MySQL 合并两列和三列

mysql - 使用 UNION ALL 和 ORDER BY 选择

c# - 属性 'x' 不是实体类型 'y' 的导航属性

java - JDBC 和 MySQL 部分使用 UTF8

c# - 是否可以使用 System.Data.Linq.Mapping.FunctionAttribute 制作一个通用方法来代替三种方法?