比较 EntityFrameworkCore MySql 中的字符串列无法生成正确的 SQL

Comparing string columns in MySql for EntityFrameworkCore fails to generate proper SQL

我正在使用 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'.

的下 2 个数据库条目

代码从外部按预期工作,但当我查看生成的 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.

一起使用

回答我自己的问题:

使用 string.Compare(a.Name, "b") > 0 而不是 string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0