2010-10-04 14 views
1

我想要设计我的应用程序来执行以下操作: 1.将LINQ查询从客户端发送到某个服务器上的某个WCF服务 2.该服务器接收该LINQ查询并执行linq-目标搜索 3.服务器然后返回结果。Linq WCF上的查询

这可能吗?如果是这样如何?我无法找到关于此主题的任何教程。

注意:我不想向WCF服务发送方法调用,然后执行底层的LINQ查询。我希望WCF服务接收某种形式的自定义LINQ查询并进行计算。

+0

客户端如何在他不知道的对象上构建LINQ查询? – 2010-10-04 16:36:32

回答

0

一种简单的方法是将LINQ查询作为字符串发送到service方法,并将返回类型与适当的对象一起使用。所以该服务将简单地执行查询并返回序列化对象(可能是)。

但你真的期待有一个通用的方法来返回一组LINQ查询吗?

+0

如何将linq查询序列化为字符串并将其反序列化为表达式树/ lambda并执行它? – burnt1ce 2010-10-04 19:08:38

0

我不确定可以在飞行中写linq ...有人纠正我,如果我错了。

更好的方法是使用dataadaptors,并将sql传递给它并返回数据集。

1

Linq仅仅是对对象集合执行操作的委托方法。因此,如果您的客户端知道您的服务器应该处理的类型,那么您应该能够创建并将Func<T>对象传递给服务器以处理其对象集合。我曾经这样做过。只要记住你的客户端应该知道你的服务器最终会在linq查询中有什么。

除非您希望客户端能够从头构建linq查询,否则我没有看到任何好的方法。一些坏的,但我不会去那里。

作为一个完全虚构的例子,你可以这样做:

 Func<Order,bool> filter = o => o.Price > 0; 
     // pass the filter object to the server and on server do: 
     var res = objectCollection.Where(filter); 

前提是你的对象是类型订单,并含有一种被称为“价格”属性,查询将在此情况下返回所有的订单是成本一些东西。正如你所看到的,你的客户必须知道“订单”类型才能设置查询。

+0

有趣...但在我的情况下,我想添加属性到对象而无需重新编译。 – burnt1ce 2010-10-04 19:05:48

+0

你是什么意思的“添加属性”,你指的是什么对象?我编辑了这个帖子以包含一个简单的例子。 – danijels 2010-10-05 07:36:34

1

如果Linq查询(来自客户端)是您的首要重点,那么为什么不使用WCF数据服务;它支持来自客户端的linq操作。

ashraf