我希望能够使用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"));