Cas*_*jne 1 c# linq .net-4.0 wcf-data-services
在WCF/Web服务的OData 返回宁静类型的项目vBeheer.
在客户端我创建了消耗的方法:
SRTDBEntities es = new SRTDBEntities(_serviceRoot);
return es.vBeheer.Where(b =>
b.TrackID == trackid &&
b.PersoonID == CurrentPersoon.ID );
Run Code Online (Sandbox Code Playgroud)
但是我注意到(在调试一个下午之后)将.ToList()添加到表达式时,结果集会损坏.该Count()项目是正确的,符合市场预期,但该项目的值是错误的.许多都是重复的,很多都丢失了(显然).
所以我在linqpad中测试了这个:
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).Dump();
Run Code Online (Sandbox Code Playgroud)

但是当添加.ToList()时就出错了
vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump();
Run Code Online (Sandbox Code Playgroud)
这导致许多重复(没有任何模式?)项目

此行为是意外的和不需要的.而且更有趣.我们确定数据库返回正确的结果,在调试服务器(在webservice中)结果仍然正确,但是当到达客户端时,它出现了可怕的错误.
IT不会成为问题,但数据由DevExpress组件(DXGrid)使用,无论如何都会执行ToList().
nb:在浏览器中执行查询:
http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019
Run Code Online (Sandbox Code Playgroud)
返回一组预期的唯一项.
这通常表示您的视图具有非唯一的键列(在EF模型中).EF只是用一组键值重复它读取的第一行.
然而,有和没有的差异ToList()是出乎意料的.它只是一种枚举查询的方法,Linqpad在执行时也会这样做Dump().