2010-12-21 1 views
1

내 결과를 필터링하는 Silverlight 앱 (RIA 서비스 포함)에 몇 가지 문제가 있습니다. 아이디어는 클라이언트에서 EntityQuery와 필터 및 호출로드를 설정합니다. 그러나 이것은 나를 위해 작동하지 않습니다.Linq를 사용하여 자녀가 부모를 필터링

Heres my code.

public void FireQuery(string filterValue) 
{ 
    EntityQuery<Parent> query = m_ParentDomainContext.GetParentQuery(); 
    query = query.Where(p => p.Children.Any(c => c.Name.Contains(filterValue))); 
    m_ParentDomainContext.Load(query, Query_Completed, null); 
} 

컴파일러는 정상적으로 작동하지만 런타임에는 '쿼리 연산자'모두 '가 지원되지 않습니다. " 예외. 누구나 이와 같은 필터링 방법을 알고 있습니까? 다시 말하지만, 저는 이것을 클라이언트에서 설정하는 방법을 찾고 있습니다.

편집 : 나는 비슷한 결과로,뿐만 아니라 몇 가지 다른 쿼리를 시도했습니다주의해야합니다

query = query.Where(p => p.Children.Where(c => c.Name.Contains(filterValue)).Count() != 0); 

query = query.Where(p => p.Children.Where(c => c.Name.Contains(filterValue)).FirstOrDefault != null); 

query = query.Where(p => p.Children.Where(c => c.Name.Contains(filterValue)).Any()); 

쿼리 연산자 '카운트/FirstOrDefault/모든'지원되지 않습니다. 나는 분명히 뭔가를 여기에서 놓치고있다. ...

+0

내가 RIA 서비스에 대해 잘 모르는 도움이되기를 바랍니다,하지만 난이 서버로 전송 될 수 있도록이 쿼리를 표현하는 방법이 없기 때문에 그것은 생각합니다. 아마도 서버에서 쿼리를 생성하여 클라이언트에 공개 할 수 있습니까? –

+0

제가 할 수는 있지만 문제는 제가 적용하고자하는 여러 개의 필터가있을 수도 있고 없을 수도 있다는 것입니다. 위의 작업을 수행하면 클라이언트에서 필터를 동적으로 적용 할 수 있습니다. 서버에 필터의 변수 목록을 보내시겠습니까? 나는 그것이 순조롭게 진행될 것이라고 확신하지 못한다. –

+0

학부모 클래스의 정의를 가르쳐 주시겠습니까? – Schultz9999

답변

1

나는 이것과 함께 약간 놀려고 했으므로, First, Any, Count와 같은 메소드를 LINQ와 함께 사용할 수 없다는 것을 알았다. (그리고, 나는 믿는다. , 심지어 NHibernate) WCF RIA 서비스를 통해 그들은 IQueryable에 정의되어 있지 않습니다,하지만, instread는 System.Linq 네임 스페이스에 정의 된 확장 메서드입니다. 이것이 컴파일 타임 오류가 아닌 런타임 예외로 표시되는 이유입니다. 여기서 사용할 수있는 확장 방법은 System.ServiceModel.DomainServices.Client (Where, Skip, Take, OrderBy 등)에 있습니다.

사람들은 (귀하의 경우와 같은 m_ParentDomainContext.Parents로) 컬렉션에 대한 반면, 구성 및 다시 서버로 전송 될 필요가 있기 때문은 "EntityQuery"목적과 관련이있다, 당신은 자유롭게 System.Linq 확장 방법을 사용할 수 있습니다.

이 기능을 구현하기 위해 Thomas Levesque가 말했듯이 원하는 데이터 만 가져 오기 위해 서버에서이를 노출하거나 사용 가능한 구문을 사용하여 쿼리를 작성할 수 있습니다. 예 : System.ServiceModel.DomainServices.Client)을 입력 한 다음 결과 데이터에 다른 필터를 적용합니다 (여기서 System.Linq 네임 스페이스의 확장 방법을 사용할 수 있음).

추신 : 저는 고전적인 Entity Framework와 Entity Framework CodeFirst를 사용하여이 작업을 시도했으며 동일한 결과를 얻었습니다.

나는이

+0

답변 해 주셔서 감사합니다. 더 많은 것을 읽고 나 혼자서 아무것도 발견하지 못한 후에, 결국 Thomas Levesque가 제안한 것을했습니다. 왜 실망시키지 않는지/작동하지 않는 이유에 대해 설명하는 것이 좋습니다. 다시 한번 감사드립니다. –