2010-03-05 3 views
6

이것이 가능한지 전혀 알 수는 없지만 멋지죠. 문제는 그것이 가능한지 아닌지, 가능하다면 약간의 예가 될 것입니다.wcf 서비스를 통해 반환 할 값의 범위를 지정하는 람다 식을 사용할 수 있기를 원합니다.

람다 식을 전달하는 데 사용할 메서드 서명이 확실하지 않습니다.

예 방법 IList<Group> GetGroups()

어떻게 당신은 그것으로 람다 표현식을 통과 할 수 있도록 수정 것인가?

다음 질문은 당신이 막대기에, 예를 들어

  • where .deleted == false 또는
  • where .DateAdded > aDate

그래, 나는 달을 원하는 모든 그룹 개체를 반환하는 람다 식을 코딩 할 방법입니다 ;) 미리 감사드립니다.

(편집 이것은 실제로 데이터를 가져올 데이터 액세스 레이어 때문에 실제로 생각할 수없는 생각이지만, 서비스를 통해 일부 개체 컬렉션을 쿼리하고 있다고 가정합니다. dal 걱정).

답변

7

: 당신이 Func이 예상되는 람다를 전달할 수 있기 때문에 뭔가처럼이 될 수있다 순서는 반환되는 : 당신이 WCF 서비스에 보낼 수 있도록

말썽이
IList<Group> GetGroups(Expression<Func<Group, bool>> predicateExpression); 

는, 표현, 직렬화 할 수없는 ... 그러나, 당신은 Expression Tree Serialization 함께 할 수있는 방법을 찾을 수 있습니다 계획.

+0

winnah 감사합니다. 이전에 게임과 비슷한 것을 썼습니다. –

0

"述語": A Func<Group, bool>을 전달하면 해당 그룹에 대해 참 또는 거짓을 반환합니다. 당신은 그룹이 일치해야하는 조건을 표시하는 유형 Expression<Func<Group, bool>>의 매개 변수로 GetGroups 방법을 선언 할 수

var fooGroups = GetGroups(g => g.Name.StartsWith("Foo"));

+2

그리고 WCF 서비스로 보내기 위해 대리인을 어떻게 serialize 할 계획입니까? –

+0

건배;) 아직도 나는 GetGroups의 메소드 서명이 무엇인지 이해하지 못한다. –

+0

고마워, 토마스 - 내 잘못이야. –

1

나는 RIA 서비스가 당신이 원하는대로한다고 생각하지만, 그 뒤에있는 마법에 대해서는 모른다.

2

당신은

  • 는 백 엔드 서비스는 웹 서비스가이 쿼리 언어의 문자열을 사용하는 방법
  • 는 클라이언트 측 변환을 쓰기를 노출
  • 이해하는 간단한 쿼리 언어를 정의 할 수 있습니다 IQueryable을 표현식 트리로 가득 채우고 쿼리 언어로 번역하는 시스템
  • 이제 클라이언트는 쿼리 언어로 직접 쿼리를 작성하거나 번역사가 쿼리 언어로 바꾸는 LINQ 쿼리를 작성할 수 있습니다
  • 이봐, 너는 LINQ-To-Tortoise 만 발명 해!

매트 워렌은 이런 종류의 일을하는 방법에 대해 seventeen blog articles 있습니다.

+0

lol linq-To-Tortoise ... 위험한 동물처럼 들립니다. 커스텀 스크립팅 언어를 부끄럽게 생각하는 경향이 있습니다. 앞으로 많은 문제를 야기 할 수있는 많은 통제와 방임을 포기하고 있습니다. 하지만 IQueryable을 더 많이 보게 될 것입니다 ... 감사합니다. –

관련 문제