2017-04-07 10 views
0

を生成するために失敗した私は、次のLINQクエリを記述することMySql.Data.EntityFrameworkCoreのバージョン6.10.1-βを使用しています:EntityFrameworkCore用のMySQLの文字列の列を比較すると、適切なSQL

「名前」プロパティがある
 var data = await _context 
      .Assets 
      .Where(a => string.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0) 
      .Take(2) 
      .ToListAsync(); 

文字列。つまり、 '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でこれを使用しています。自分の質問へ

答えて

0

回答:

利用string.Compare(a.Name, "b") > 0の代わりstring.Compare(a.Name, "b", StringComparison.OrdinalIgnoreCase) > 0