代码之家  ›  专栏  ›  技术社区  ›  John Nicholas

我希望能够使用lambda表达式指定要在WCF服务上返回的值范围

  •  6
  • John Nicholas  · 技术社区  · 14 年前

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

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

    例如方法 IList<Group> GetGroups()

    您将如何修改它以能够向其中传递lambda表达式?

    下一个问题是,如何对lambda表达式进行编码,以返回例如

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

    是的,我要月亮在棍子上;) 事先谢谢。

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

    4 回复  |  直到 14 年前
        1
  •  7
  •   Thomas Levesque    14 年前

    你可以申报 GetGroups 参数类型为的方法 Expression<Func<Group, bool>> ,表示组必须匹配才能返回的谓词:

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

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

        2
  •  2
  •   Eric Lippert    14 年前

    你可以

    • 定义后端服务能够理解的简单查询语言
    • Web服务公开使用此查询语言的字符串的方法
    • 编写一个客户端转换系统,该系统接收一个可查询的表达式树,并将其转换为查询语言。
    • 现在,客户机既可以直接用您的查询语言编写查询,也可以编写LINQ查询,您的翻译程序将其转换为您的查询语言。
    • 嘿,你只不过是发明了linq to tortoise!

    马特·沃伦 seventeen blog articles 关于如何做这类事情。

        3
  •  1
  •   Pablo Castilla    14 年前

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

        4
  •  0
  •   Benjamin Podszun    14 年前

    您可以传递一个“谓词”:a Func<Group, bool> ,返回给定组的真或假。因为你可以通过一个lambda Func 这应该是这样的:

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