2011-09-07 82 views
0

我試圖爲我的WCF服務生成請求。 我需要通過日期時間參數或Ids查詢WCF。WCF數據服務:通過多個參數請求

我指的是在最後的結果我想獲得的URL一樣 myservice.svc/MyObjects()?$濾芯的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; 

我也tryed解決在這種情況下,這個問題,實施這個代碼,但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)); 
      } 

回答

1

構建整個WHERE條件的字符串和使用AddQueryOption("$filter", yourBuiltQueryString)。據我所知,你不能僅添加部分條件 - 添加查詢選項的名稱必須以$開頭,這是僅限定義的一組運算符。因此,在查詢中不能使用Where條件 - 必須通過AddQueryOption方法調用才能添加整個條件以構建正確的or序列。

如果是Any請確保您使用的是正確的CTP(btw.CTP不是生產就緒版本)。它被添加到June 2011 CTP中,並且您必須在服務器和客戶端上使用該庫。