我正在尝试为我的WCF服务生成请求。 我需要通过datetime参数或Ids查询WCF。
我的意思是在最后的结果中我想得到这样的网址 myservice.svc / MyObjects()?$ filter = CreateDate ge datetime'datecomeshere'或Id eq 3或Id eq 45或Id eq 112
问题是我在客户端有一组id和一个日期变量。 那么如何向WCF生成这种请求呢?
以下是我现在的代码:
var localEntityIds = DbConnection.ObjectContextConnection.GetEntitiesByDate<T>(DateToReplicate).Select(x => x.Id);
if (DateToReplicate > DateTime.MinValue)
{
expQuery =
Service.CreateQuery<T>(SetName).Where(
x => x.ReplicaInfo.CreateDate >= DateToReplicate ||
x.ReplicaInfo.ModifyDate >= DateToReplicate || localEntityIds.Where(y=>y ==x.Id).Any()) as DataServiceQuery<T>;
}
此代码抛出一个异常,即最大协议版本不应小于3.0,并且不支持任何方法。 但我有3.0版本
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
我也试图解决实现此代码的问题,但在这种情况下wcf什么都不返回:
var localentities = DbConnection.ObjectContextConnection.GetEntitiesByDate<T>(DateToReplicate).Select(x => x.Id);
if (DateToReplicate > DateTime.MinValue)
{
expQuery =
Service.CreateQuery<T>(SetName).Where(
x => x.ReplicaInfo.CreateDate >= DateToReplicate ||
x.ReplicaInfo.ModifyDate >= DateToReplicate) as DataServiceQuery<T>;
}
foreach (var localentity in localentities)
{
expQuery = expQuery.AddQueryOption("or", string.Format("Id eq guid'{0}'", localentity));
}
答案 0 :(得分:1)
将条件构建为字符串并使用AddQueryOption("$filter", yourBuiltQueryString)
。据我所知,你不能只添加部分条件 - 添加的查询选项的名称必须以$
开头,Where
只是定义的运算符集。因此,您无法在查询中使用AddQueryOption
条件 - 必须通过or
方法调用添加整个条件,以构建正确的Any
序列。
如果{{1}}确保您使用的是正确的CTP(顺便说一句,CTP不是生产就绪版本)。它已添加到June 2011 CTP中,您必须在服务器和客户端上使用该库。