2009-12-04 3 views
0

데이터 쿼리에 Ria Service 도메인 서비스가 사용됩니다.Linq에 문제가 있습니다.

내 데이터베이스에는 이름, 성을 가진 사람 테이블이 있습니다. 그런 다음 데이터 처리를 위해 EF/RIA 서비스를 사용합니다.

그런 다음 입력을 기반으로 사용자 입력을 캡처하는 필터 ViewModel을 만들고 linq 쿼리를 구성하여 데이터에 액세스합니다. 서버 측에서

는, 사람의 기본 DomainService 쿼리는 다음과 같습니다

if (!String.IsNullOrEmpty(this.LastName)) 
    q = q.Where(p => (p.LastName.Contains(this.LastName))); 

:

클라이언트 측에서
public IQueryable<Person> GetPerson() 
    { 
    return this.Context.Person; 
    } 

, 필터에 대한 LINQ 쿼리가 같은 (내가 여기에 기능을 포함 사용)입니다 생성 된 linq 쿼리는 다음과 같습니다 (디버깅 할 때 얻었습니다) :

MyData.Person[].Where(p => (p.LastName.Contains(value(MyViewModel.PersonFilterVM).LastName) || p.Person.LegalLastName.Contains(value(MyViewModel.PersonFilterVM).LastName))) 

그는 app에 검색을위한성에 "Smith"를 넣었지만 그 결과는 "Smith"와 전혀 관련이 없습니다!

문제를 해결하는 방법은 무엇입니까?

답변

1

오류가 무엇인지 여기에서 추측합니다. 따라서이 방법이 효과가 없을 수 있습니다.

두 번째 코드 스 니펫에서 다음을 수행하십시오.

q = q.Where(p => (p.LastName.Contains(this.LastName))); 

여기는 귀하의 오류라고 생각합니다. Linq는 iterate 할 때까지 where 절을 평가하지 않는다. 다음 행을 변경하십시오.

qWithData = q.Where(p => (p.LastName.Contains(this.LastName))).ToList(); 

.ToList() 호출은 데이터와 함께 쿼리를로드합니다.

0

디버거를 체크인 할 때 value(MyViewModel.PersonFilterVM).LastName은 쿼리가 해결 될 때 Smith로 평가합니까?

쿼리는 열거 될 때까지 해결되지 않습니다.