首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将lambda表达式传递给WCF服务?

如何将lambda表达式传递给WCF服务?
EN

Stack Overflow用户
提问于 2011-06-23 00:41:42
回答 4查看 11.9K关注 0票数 16

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

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

现在我发现了一件很明显的事情,那就是我不能序列化lambda表达式。我研究了将字符串解析为lambda表达式,但这也是行不通的。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-23 01:12:26

也许动态查询在您的情况下可以工作?

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

您可以将where子句字符串传递给服务,该服务将对其进行验证并将其转换为表达式

票数 6
EN

Stack Overflow用户

发布于 2011-06-23 01:17:05

我们必须在LINQ中解决这个问题。例如,在执行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 server上结束。显然,我们不能将lambda持久化到服务器。

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

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

如果你对它在LINQ中的工作原理感兴趣,LINQ- to -SQL架构师Matt Warren已经写了一长串关于如何自己做这件事的博客文章:

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

票数 25
EN

Stack Overflow用户

发布于 2011-06-23 01:21:51

我在CodePlex上使用this库来序列化/反序列化表达式树(但它是它的前一个版本),它可以完成这项工作。

这里还有其他一些类似的问题:Serializing and Deserializing Expression Trees in C#

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6443433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档