oData中的Where子句

本文关键字:子句 Where 中的 oData | 更新日期: 2023-09-27 18:08:59

是否可以在OData中使用此代码?

  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

好。

oData中的Where子句

据我所知,像你的代码这样的请求应该是可能的。

假设LogId是您的OData服务的Key列,您的代码

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

将由OData Service在内部转换为

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

,这是获取具有特定Id的元素的标准语法。

您显示的错误消息被抛出,如果查询Id没有在列表中找到条目,您是否检查了您提供的Id是否正确?

(如果这是问题,您可以通过设置服务上下文的IgnoreResourceNotFoundException属性(参见MSDN)来关闭此行为)

在我所做的测试中,像您这样的查询确实有效,也许您的Odata服务实现包含错误?

你可以用LinqPad这样的工具来测试你的代码和服务,这对你的测试很有帮助。