我使用MySql.Data.EntityFrameworkCore版本6.10.1-beta编写以下LINQ查询:
var data = await _context
.Assets
.Where(a => string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0)
.Take(2)
.ToListAsync();
其中'Name'属性是一个字符串。换句话说,我希望获得“Name”属性大于“b”的下两个数据库条目。
代码从外部按预期工作,但是当我查看生成的SQL时,我看到以下内容:
SELECT `a`.`F_ASSET_PK`, `a`.`F_ASSET_TYPE`, `a`.`F_CREATION_TIME`, `a`.`F_ID`, `a`.`F_IS_SOFT_DELETED`, `a`.`F_LAST_MODIFIED_TIME`, `a`.`F_LIBRARY_ID`, `a`.`F_NAME`, `a`.`F_OWNER_ID`, `a`.`F_TENANT_ID`
FROM `accounting`.`T_ASSET` AS `a`
正如您所看到的,我的LIMIT和WHERE子句不在生成的SQL中。它们被应用于记忆中,导致次优性能。
如果我删除了C#中的'Where',那么使用LIMIT正确生成查询。因此,只要我尝试通过string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0
比较查询中的字符串,MySql驱动程序就会混淆,并且无法生成正确的SQL。
我是否可以使用另一种语法来比较导致正确SQL的字符串?
请注意,我在Microsoft.EntityFrameworkCore 1.1.0中使用它。
答案 0 :(得分:0)
回答我自己的问题:
使用string.Compare(a.Name, "b") > 0
代替string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0
。