gpt4 book ai didi

c# - 如何将 lambda 表达式传递给 WCF 服务?

转载 作者:可可西里 更新时间:2023-11-01 03:05:32 28 4
gpt4 key购买 nike

我当前的项目使用的是 IDesign 架构,所以我所有的层都是服务。我想让资源访问层的 CRUD 中的 Read 方法采用 lambda 表达式形式的谓词以及要提取的相关对象列表。这样资源访问层就会非常通用。

[OperationContract]
Result<MyObject> ReadObjects(Func<MyObject, bool> predicate, string[] includes);

现在我发现了一些本来应该很明显的事情,那就是我无法序列化 lambda 表达式。我研究过将字符串解析为 lambda 表达式,但这也是行不通的。

有什么方法可以用来将 lambda 表达式传递给服务吗?有没有更好的方法来完成我想做的事情?

最佳答案

我们必须在 LINQ-to-Just-About-Everything 中解决这个问题。例如,在执行 LINQ-to-SQL 时:

var results = from c in customers where c.City == "London" select c.Name;

lambdas c=>c.City == "London"c=>c.Name 的内容需要以某种方式在 SQL 服务器上结束服务器理解的一种形式。显然我们不能将 lambda 持久化到服务器。

相反,我们所做的是将 lambda 表达式转换为表达式树,在运行时分析表达式树,从中构建一个实际的 SQL 字符串,并将该字符串发送到服务器进行处理。

你可以做同样的事情。为您的服务器创建一种查询语言。在客户端,将 lambda 表达式转换为表达式树。在运行时分析它们,将结果转换为您的查询语言的字符串,然后将查询发送到服务。

如果您对这在 LINQ 中的工作原理感兴趣,LINQ-to-SQL 架构师 Matt Warren 撰写了一系列关于如何自己做的博客文章:

http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx

关于c# - 如何将 lambda 表达式传递给 WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com