2017-10-24 21 views
1

이 LINQ의 MySQL의 DbContext에 쿼리가 있습니다C# 엔티티 프레임 워크 Linq에 어디에 문제

var letter1 = (from l in dbContext.letters_incoming 
    where l.LetterText.Trim() == "simple letter text".Trim() 
    select l).FirstOrDefault(); 

var letter2 = dbContext.letters_incoming.Where(new Func<ModelLetterIncoming, bool>(l => { 
     string name = l.LetterText; 
     if (name == "simple letter text") 
      return true; 
     else return false; 
    })).FirstOrDefault(); 

첫 번째 쿼리가 null 반환하지만 두 번째 반환 올바른 값은. Where Where 조건에서 공백으로 인해 발생할 수 있습니까?

+1

작동 중복 제거 할 수 있습니다. 이것은 선행 또는 후행 공백이없는 문자열 리터럴이며 Trim()은이를 제거합니다. – RH6

+2

첫 번째 linq 쿼리는 SQL 쿼리로 변환되어 데이터베이스에서 실행됩니다. 두 번째는'letters_incoming' 테이블 전체를 메모리로 가져 와서 필터링을 수행합니다. 이것은 차이를 유발할 수 있습니다 (정확히는 확실하지 않지만). 어떤 SQL 쿼리가 log (dbContext.Database.Log = Console.WriteLine'과 같이)를 사용하여 생성되었는지 확인하고 어떤 쿼리가 생성되었는지와 왜 라인을 찾지 못하는지를 확인할 수 있습니다. 일부 데이터 정렬 문제 일 수 있습니다 (특히 문자열이 영어가 아닌 경우). – Evk

+0

정말로 오류가 표시되지 않습니다.이 코드로 문제를 정확히 확인할 수 있습니까? –

답변

2

문제가 내가

mySqlConnectionStringBuilder.CharacterSet = "utf8"; 

을 추가 MySqlConnectionStringBuilder에 있었고, 그것은 "간단한 편지 텍스트"에 트림()를 호출 한 가지 들어