我希望能够使用lambda表达式来指定要通过wcf服务返回的值范围

我不知道这是否可能……但它会很酷。 问题是,是否有可能,但如果可能的话,还有一些例子。

我不确定您将使用什么方法签名来传递lambda表达式。

例如方法IList GetGroups()

你如何修改它以便能够将lambda表达式传递给它?

接下来的问题是如何编写lambda表达式以返回所有Group对象,例如

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

是的,我想把月亮放在棍子上;)先谢谢你。

(编辑我认为这实际上有点不合理,因为实际上会获取数据的数据访问层……但是假设您正在通过服务查询某些对象集合而不必担心dal )。

您可以使用Expression>类型的参数声明GetGroups方法,该参数表示组必须匹配才能返回的谓词:

 IList GetGroups(Expression> predicateExpression); 

问题是,表达式无法序列化,因此您无法将其发送到WCF服务……但是,您可能会找到一种方法来使用表达式树序列化项目。

你可以

  • 定义后端服务理解的简单查询语言
  • Web服务公开了一种采用此查询语言的字符串的方法
  • 编写一个客户端转换系统,该系统接收一个充满表达式树的IQueryable,并将其转换为查询语言
  • 现在,客户端可以直接用查询语言编写查询,也可以编写LINQ查询,翻译人员可以将查询语言转换为查询语言
  • 嘿,你刚刚发明了LINQ-To-Tortoise!

Matt Warren有十七篇关于如何做这类事情的博客文章 。

我认为RIA服务可以满足您的需求,但我不知道它背后的魔力。

你可以传递一个“谓词”:一个Func ,它为给定的组返回true或false。 既然你可以传递一个预期有Func的lambda,这可能是这样的:

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