WCF / OData webservice 会返回vBeheer
类型的 restful 项。
在客户端我创建了消耗的方法:
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();
但是当添加.ToList()时出错了
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump();
这导致许多重复(没有任何模式?)项目
此行为是意外且不需要的。而且更有趣。我们确定数据库返回正确的结果,在调试服务器时(在webservice中)结果仍然正确,但是当到达客户端时,它出现了可怕的错误。
IT不会成为问题,但数据由DevExpress组件(DXGrid)使用,无论如何都会执行ToList()。
nb:在浏览器中执行查询:
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019
返回一组预期的唯一项目。
答案 0 :(得分:5)
这通常表示您的关键列(在EF模型中)具有非唯一的视图。 EF只是用一组键值重复它读取的第一行。
有{和1}的差异是出乎意料的。这只是一种枚举查询的方法,Linqpad在执行ToList()
时也会这样做。