2016-08-09 2 views
0

데이터베이스의 Contacts 테이블에서 모든 레코드를 가져온 다음이 값을 사용자가 검색 양식에서 선택한 값에 따라 필터를 적용하는 findAll 함수가 있습니다. 결과는 한 번에 한 개의 필터로 필터링됩니다.C# IQueryable not working

IQueryable<Contact> resultContacts = db.Contacts; 

if(request['Name'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Name.Contains(Name)); 
} 

if(request['Phone'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Phone.Equals(Phone)); 
} 

if(request['Company'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Company.Contains(Company)); 
} 

return resultContacts; 

문제는 이제 작동하지 않는다는 것입니다. 각 if 안에있는 resultContacts.Where은 원래 이유 번호로 첫 번째 줄에 있던 resultContacts으로 재설정됩니다. 예를 들어 : 디버깅 할 때 변경 사항은 첫 번째 if (100 개의 레코드 중 10 개까지 끝납니다.)에 적용됩니다.하지만 두 번째 if에 들어가면 코드는 원래 resultContacts을 쿼리합니다. 첫 번째 결과는 if입니다.

2 주 전까지 1 년 동안 정상적으로 작동했습니다. 내 코드에서 뭔가 바뀌 었는지 모르겠다. 내가이 변경을하는 참조 또는 뭔가를 추가했다면.

왜 그런가? 감사합니다.

+0

각 쿼리에서 요청 개체를 사용하셨습니까? – Niklas

+1

나는이 구문을 허용하는 C#을 놀라게한다. request [ 'Phone']'single quote embrace'char' not'string' – Imad

+0

또한, request [ 'Name']) ]'는'이름'과 같은 것이 아닙니다. 'Phone'과'Company'에 대한 내용입니다. 당신이 가지고있는 것과 같이 보이는 코드를 넣지 마십시오. * 실제 * 코드 게시. – hvd

답변

-2
var results = db.Contacts 
    .Where(a => request["Company"] == String.Empty || a.Company.Contains(Company)) 
    .And(a => request["Phone"] == String.Empty || a.Phone.Equals(Phone)) 
    .And(a => request["Name"] == String.Empty || a.Name.Contains(Name))); 
+2

당신은 Where 조건으로 모든 3 가지 조건을 통합 할 수 있습니까? 이것이 효과가있는 것처럼 보입니다. 단지 그것을 이해하고 있는지 확인하고 싶습니다. – MichaelThePotato

+0

네, 그렇게 할 수있을 것 같네요. – Matt

+1

일부 코드뿐만 아니라 답변에 대한 설명을 제공하십시오. OP 코드와이 코드 간의 동작 차이를 이해하지 못합니다. 나에게 그들은 같은 방식으로 일해야한다. – 3615