WCF/OData Web 服务 返回类型为的restful项vBeheer
。
在客户端,我创建了使用的方法:
SRTDBEntities es = new SRTDBEntities(_serviceRoot);
return es.vBeheer.Where(b =>
b.TrackID == trackid &&
b.PersoonID == CurrentPersoon.ID );
但是我注意到(经过一个下午的调试)将.ToList()添加到表达式时,结果集会损坏。项目的Count()
正确且符合预期,但项目的值是错误的。许多是重复的,许多是丢失的(显然)。
所以我在linqpad中对此进行了测试:
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).Dump();
- 按预期从服务返回正确的结果,注意ID 应该是每个“行”的唯一值:
但是在添加 .ToList() 时会出错
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump();
这会导致许多重复(没有任何模式?)项目
此行为是意外且不需要的。甚至更有趣。我们确定数据库返回正确的结果,在调试服务器(在 web 服务中)时结果仍然正确,但是当到达客户端时,它出现了可怕的错误。
IT 不会是一个问题,但是数据被 DevExpress 组件 (DXGrid) 使用,它无论如何都会执行 ToList()。
注意:在浏览器中执行查询:
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019
返回一组预期的唯一项。