c# - 使用 ODATA 服务时出现重复项目

标签 c# linq .net-4.0 wcf-data-services

WCF/OData 网络服务 返回类型为 vBeheerrestful 项。

在客户端我创建了消费的方法:

        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 应该是每个“行”的唯一值:

right

但是在添加 .ToList() 时出错了

 vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19   ).ToList().Dump();

这会导致许多重复的(没有任何模式?)项目

enter image description here

此行为是意外且不需要的。甚至更有趣。我们确定数据库返回了正确的结果,在调试服务器(在 web 服务中)时结果仍然正确,但是当到达客户端时,却出现了可怕的错误。

IT 不会有问题,但数据由执行 ToList() 的 DevExpress 组件 (DXGrid) 使用。

nb: 在浏览器中执行查询:

http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019

返回一组预期的唯一项。

最佳答案

这通常表示您的 View 包含不唯一的键列(在 EF 模型中)。 EF 只是用一组键值重复它读取的第一行。

不过,使用和不使用 ToList() 的区别是出乎意料的。这只是枚举查询的一种方式,Linqpad 在执行 Dump() 时也会这样做。

关于c# - 使用 ODATA 服务时出现重复项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957334/

相关文章:

c# - LINQ 从一个集合中获取不属于另一个集合的元素

c# - 对于 C# 中的匹配,Regex 实例线程是否安全

.net - .NET 4.0运行时是否比.NET 2.0运行时慢?

internet-explorer - 使用 .NET 4.0 在 IE 中加载 .NET UserControls

c# - 配置弹性设置 Entity Framework 6.02

c# - 如何使用流畅的断言比较对象图中的嵌套列表

c# - MarkupExtension 声明中的默认构造函数参数

sql-server - 停止 LINQ to SQL 在插入后执行 select 语句

c# - 使用多个关键字进行 Linq 搜索

c# - 仅将前 20 个单元格的字母从 datagridview 导出到 *.txt 文件