2017-04-07 5 views
0
나는 다음과 같은 LINQ 쿼리를 작성하는 MySql.Data.EntityFrameworkCore의 버전 6.10.1 베타를 사용하고

: '이름'속성이 어디적절한 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` 

절을 생성 된 SQL에없는 WHERE 내 LIMIT을 볼 수 있듯이. 그것들은 메모리에 적용되어 차선의 성능을냅니다.

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.