2012-03-19 1 views
1

나는 반환 된 Queryable에서 .FirstOrDefault()로 .NET에서 WCF Data Services를 시험하고있다. 그러나 Fiddler와 함께 확인할 때 여전히 개체 집합 전체가 반환됩니다. 내가 잘못한 게있어? WCF 데이터 서비스 IQueryable First()는 전체 목록을 반환합니다 (Fiddler를 통해 확인 됨). 왜?

코드

정말 기본입니다 :

[OperationContract] 
IQueryable<Note> Query(); 

[WebGet(UriTemplate = "")] 
public IQueryable<Note> Query() 
{ 
    return _source.OfType<Note>().AsQueryable<Note>(); 
} 

Note note = _client.Query().FirstOrDefault(); 

이 여전히 양보와 네트워크를 통해 모든 메모를 전송합니다.

내가 무엇을 놓쳤는가?

일반 WCF 웹 서비스에서 IQueryable과 "원격 LINQ"를 사용할 수 있습니까?

DataService (T) 및 DataServiceContext를 로컬로 클라이언트로 사용하는 몇 가지 예를 발견했습니다. 나는 그것을 시도했지만 전혀 작동하지 못했습니다.

유일하게 필요한 것은 "원격 LINQ"기능입니다. LINQ를 통해 웹 서비스를 쿼리하고 모든 항목에 응답하지 않을 수 있습니다 (예 : 첫 번째 요청시).

+0

귀하의 예는,하지 리아 서비스 WCF 타입이다. –

답변

2

FirstOrDefault()를 호출하면 클라이언트 측에서 전체 목록을 수신하므로 클라이언트는 첫 번째 매개 변수 만 가져 오도록 필터링합니다. 첫 번째 요소 만 다운로드하려는 경우 서버 측에서 firstOrDefault를 수행하는 특별한 webMethod가 필요합니다.

[WebGet] 
public Note QueryFirst() 
{ 
    return _source.OfType<Note>().AsQueryable().FirstOrDefault(); 
} 
+0

무엇? IQueryable의 모든 아이디어가 LINQ 클라이언트 측에서 서버 측에서 실행되도록 _able_ 할 수 있습니까? –

+0

그래서 WCF 데이터 서비스를 사용하고 싶습니다 : http://stackoverflow.com/questions/4291370/expose-iqueryable-over-wcf-service –

0

NETFx HttpEntityClient를 사용하여 First()를 사용하여 다른 문제가 발생했습니다. First()를 사용할 때 NotSupportedException을 던집니다.

OData는 First를 지원하지 않지만 Take 또는 Skip을 지원합니다.

이 내가 할 필요 결국 무엇을 : 리아 서비스가 구문이 다른 WCF

Note note = _client.Query().Take(1).ToArray().FirstOrDefault(); 
+0

이것이 'First()'와 다르게 작동한다고 상상하기 어려울 것입니다. –

+0

I First()를 사용하려고하면 NotSupportedException을 던질 NETFx HttpEntityClient를 사용합니다. First()는 OData 쿼리에서 지원되지 않습니다. Take() 및 Skip()은 OData에서 지원되므로 대신 사용할 수 있습니다. 이 코드가 예상대로 작동하는지 확인할 수 있습니다. – joelnet