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
好。
据我所知,像你的代码这样的请求应该是可能的。
假设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这样的工具来测试你的代码和服务,这对你的测试很有帮助。