2013-04-12 63 views
1

是否可以在OData中使用此代碼?oData中Where子句

IQueryable<CallLogInfo> CallLogInfos = _callCenterServiceAccessor.CallLogInfos.Where(x => x.LogId == logid); 
      var log = CallLogInfos.ToList(); 
      return log.Any(); 

我檢查它產生了我的請求,我看到這一點:

http://services/CallCenter/CallCenterDataService.svc/CallLogInfos(1364974501.4) 

所以得到這個錯誤:

<m:message xml:lang="en-US">Resource not found for the segment 'CallLogInfo'.</m:message> 

但是當我手動對這個請求的URL的請求:

http://services/CallCenter/CallCenterDataService.svc/CallLogInfos 

它確定。

回答

3

據我所知,像你的代碼一樣的請求應該是可能的。

假設LOGID是你的OData服務中的鍵列,你的代碼

CallLogInfos.Where(x => x.LogId == logid); 

將由OData服務在內部轉化爲

http://services/CallCenter/CallCenterDataService.svc/CallLogInfos(logid) 

這是標準的語法來獲取元素與一個特定的Id。

您顯示的錯誤消息被拋出,如果一個Id的查詢沒有在列表中找到一個條目,您是否檢查過您提供的Id是否正確?

在一個測試,我做了,像您這樣的查詢不工作,也許你的OData服務(如果是這樣的問題,你可以通過設置服務上下文(see MSDN)的IgnoreResourceNotFoundException物業關閉此行爲)實現包含錯誤?

您可以使用像LinqPad這樣的工具來嘗試您的代碼和服務,這對嘗試類似的事情很有幫助。