带有WCF数据服务的SQL“in”类型行为

时间:2012-06-12 12:16:50

标签: wcf linq web-services odata

这就是我想要做的事情:

string[] names= {"Dave","Mike","Sara","Roger"};
var events = eventsDB.where(a=>names.Contains(a.name));

我认为这很清楚。 eventDB是一个Linq to SQL连接,一切都很好 - 但这不适用于服务。有没有办法实现这个目标?

干杯!

3 个答案:

答案 0 :(得分:1)

感谢提示小伙伴们,我想我已经找到了一种方法来从Web服务获得我想要的东西,而无需通过简单地手动构建查询URI来为服务添加其他方法......部分。

string[] names = { "Dave", "Mike", "Sara", "Roger" };

StringBuilder sb = new StringBuilder();
sb.Append("(");

foreach (string s in names)
{
    sb.Append(String.Format("name eq '{0}'",s));
    sb.Append(" or ");
}
sb.Remove(sb.Length - 4, 4);
sb.Append(")");

var events = eventsDB.AddQueryOption("$filter",sb.toString());

注意AddQueryOption函数

答案 1 :(得分:0)

您可以公开一个返回数组的服务方法。

然后你可以称之为

serviceProxy.serviceMethod.where(....

但我不认为你会这么想。首先,数据库和服务是完全不同的东西。

Linq转到WCF?好主意,但不计算。

答案 2 :(得分:0)

OData WCF数据服务的基础协议目前不支持此功能。

您可以在服务器端实现服务操作,并将值列表作为参数传递。请注意,对于服务操作,列表必须连接到单个字符串,例如逗号分隔列表。如果您选择行动,则可以直接传入列表。

另一种选择是构造一个类似的查询。如果数组中的值的数量很小,您可以构造一个类似的查询 其中(a => a.Name ==“John”|| a.Name ==“Mary”|| ...)