2012-12-09 6 views
0
const string keyword = "manoj"; 
     rsp.DataSource = company.GetCompanySearch(keyword); 
     rsp.DataBind(); 
    using (var context = huntableEntities.GetEntitiesWithNoLock()) 
    { 
     IEnumerable<Company> query = context.Companies.ToList(); 
     if (!string.IsNullOrEmpty(keyword)) 
     { 
      keyword = keyword.ToLower(); 
      query = query.Where(u=>u.CompanyName.Contains(keyword) 
       || u.EmailAdress.Contains(keyword) 
       ||u.MasterCountry.Description.Contains(keyword) 
       ||u.MasterIndustry.Description.Contains(keyword) 
       ||u.CompanyDescription.Contains(keyword) 
       ||u.CompanyHeading.Contains(keyword)); 
     } 
     return query.ToList(); 
    } 

쿼리 결과가 표시되지 않습니다. 데이터베이스에는 manoj라는 이름의 27 개의 레코드가 있습니다. 당신은 식을 줄 query = query.Where(...에 의해 확장 될의 IQueryable<Company>쿼리를 실행하지 않고 결과를 얻지 못했습니다.

var query = context.Companies; 

query 변에 줄 IEnumerable<Company> query = ...을 변경하는 경우 내부 예외가 예상대로 작동합니다이

+0

예외를 throw하는 행은 무엇입니까? –

+0

내부 예외는 null입니까? 그래서 예외가 있었습니까? –

답변

0

에 대한 null입니다. 이것은 Contains 표현식이 SQL (LIKE)으로 변환되는 방식으로 수행됩니다.

현재 코드에서 모든 회사를 메모리로 가져오고 Contains은 linq-to-objects에 의해 실행됩니다. 대소 문자를 구별합니다. 당신이 어떤 성냥을 얻지 못했다고 생각하는 이유입니다. SQL은 대소 문자를 구분하지 않습니다. 이는 데이터베이스의 데이터 정렬에 따라 다릅니다.

관련 문제