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

C# 我希望能够使用lambda表达式指定通过wcf服务返回的值的范围,c#,wcf,delegates,lambda,C#,Wcf,Delegates,Lambda,我不知道这是否可能。。。但那会很酷。问题是这是否可能,但如果可能的话,再举一个例子 我不确定您将使用什么方法签名将lambda表达式传递到 例如方法IList GetGroups() 您将如何修改它,以便能够将lambda表达式传递给它 下一个问题是如何编写lambda表达式以返回所有组对象,例如 where.deleted==false或 where.DateAdded>aDate 是的,我想把月亮放在一根棍子上;) 提前谢谢 (编辑我认为这实际上有点欠考虑,因为数据访问层实际上会获取数据

我不知道这是否可能。。。但那会很酷。问题是这是否可能,但如果可能的话,再举一个例子

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

例如方法
IList GetGroups()

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

下一个问题是如何编写lambda表达式以返回所有组对象,例如

  • where.deleted==false
  • where.DateAdded>aDate
是的,我想把月亮放在一根棍子上;) 提前谢谢

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

您可以传递一个“谓词”:a
Func
,它为给定组返回true或false。由于您可以在需要
Func
的位置传递lambda,因此可能类似于:


var fooGroups=GetGroups(g=>g.Name.StartsWith(“Foo”)

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

IList<Group> GetGroups(Expression<Func<Group, bool>> predicateExpression);
IList GetGroups(表达式谓词表达式);

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

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

您可以

  • 定义后端服务能够理解的简单查询语言
  • web服务公开了一个使用此查询语言的字符串的方法
  • 编写一个客户端转换系统,接收一个满是表达式树的IQueryable,并将其转换为查询语言
  • 现在,客户机可以直接用您的查询语言编写查询,也可以编写LINQ查询,并将其转换为您的查询语言
  • 嘿,你刚刚发明了LINQ To Ortoise

马特·沃伦(Matt Warren)已经了解了如何做这类事情。

以及您打算如何序列化委托以将其发送到WCF服务?干杯我仍然不明白GetGroups的方法签名是什么。哈哈,linq对乌龟说。。。听起来像是一头危险的野兽。我倾向于回避定制脚本语言——你正在放弃很多控制权,这只会在未来引发巨大的问题。但我会更深入地研究IQueryable。。。谢谢