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

时间:2017-04-07 10:43:10

标签: c# mysql entity-framework-core mysql-connector

我使用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中使用它。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

使用string.Compare(a.Name, "b") > 0代替string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0