C#实体LINQ返回错误和重复值
问题描述:
我使用下面的代码:C#实体LINQ返回错误和重复值
List<vw_GetIMeasurements> Imeasurements = context.vw_GetIMeasurements.Where(f => f.MEMBERID == userID).Distinct().ToList();
这将返回一个列表有12个值像它应该,但这些数值都是一样的(即使他们不在DB(即使它们是不同的应该解决这个问题)
DB:
返回的原始值也是错误的。 这个问题的原因是什么?我该如何解决?
答
之前,我有过这样的问题 - 事实证明,认为没有独特entity keys
设置 - 确保您的视图的主键由实体框架自动创建,确实是独一无二的...
答
也许尝试一个更简单的语法像这样
var measure = from f in context.vw_GetIMeasurements
where f.MEMBERID == userID
select f;
这种事情为我工作..
答
这个问题事实上是Richard所描述的。但是我无法选择正确的“唯一密钥”,因此造成了更多问题。
我通过创建一个自定义类并在SQL中创建它来解决我的问题。我也将我的选择限制在3列中的2列。
List<Measurement> result = (from f in context.vw_GetIMeasurements where f.MEMBERID == userID select new Measurement { Category = f.atcmCATEGORYCODEID, Size = f.imMeasurementNumber }).ToList();
测量是在自制类的情况下。
答
我有一个类似的问题 - 数据库视图在SQL服务器中看起来很好,但在调试时,重复行出现在行共享特定属性值的位置。
我发现其中一个重要的唯一键是来自外部连接表 - 因此有可能为空 - 并且该模型没有指定为唯一键。
我能够通过将此字段设置为ISNULL(field,'') - 确保始终返回值 - 并且在更新时正确解释该字段为唯一并且作为化合物的一部分来解决此问题键和行正确返回。
我知道有人可能会认为视图设计有问题(即我不应该使用外部联接),但在这种情况下,外部联接具体需要。修复工程因为复合键仍然是唯一的,即使多次返回“”。
'vw_GetIMeasurements'是否实现'Equals'和'GetHashCode'? – 2012-07-17 12:18:44
你能提供一些测试数据吗? – 2012-07-17 12:19:57
是的,它确实实现了这些。 – Metabie 2012-07-17 12:20:19