Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I want to be able to use a lambda expression to specify a range of values to return over a wcf service

I have no idea if this is possible ... but it would be cool. the question is whether it is possible but then a bit of an example if possible.

I am not sure what method signature you would use to pass the lambda expression into.

Eg the method IList<Group> GetGroups()

How would you modify that to be able to pass a lambda expression into it?

The next question is how would you code a lambda expression to return all Group objects where for example

  • where .deleted == false or
  • where .DateAdded > aDate

Yeah, I want the moon on a stick ;) Thanks in advance.

(edit I am thinking this is a bit ill-conceived actually because of the data access layer that would actually fetch the data ... but assume that you are querying some object collection over the service and don't have to worry about the dal).

like image 284
John Nicholas Avatar asked Mar 05 '10 11:03

John Nicholas


2 Answers

You could declare the GetGroups method with a parameter of type Expression<Func<Group, bool>>, which represents a predicate that the group must match in order to be returned :

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

The trouble is, expressions can't be serialized, so you couldn't send it to the WCF service... However, you might find a way to do it with the Expression Tree Serialization project.

like image 182
Thomas Levesque Avatar answered Sep 20 '22 00:09

Thomas Levesque


You could

  • define a simple query language that your back-end service understands
  • the web service exposes a method that takes a string in this query language
  • write a client-side conversion system that takes in an IQueryable full of expression trees, and translates that into the query language
  • now the client can either write queries in your query language directly, or can write LINQ queries which your translator turns into your query language
  • hey, you just invent LINQ-To-Tortoise!

Matt Warren has seventeen blog articles about how to do this sort of thing.

like image 2
Eric Lippert Avatar answered Sep 23 '22 00:09

Eric Lippert