C# C实体LINQ返回错误和重复的值

C# C实体LINQ返回错误和重复的值,c#,linq,entity,C#,Linq,Entity,我使用以下代码: List<vw_GetIMeasurements> Imeasurements = context.vw_GetIMeasurements.Where(f => f.MEMBERID == userID).Distinct().ToList(); 这将返回一个包含12个值的列表,虽然这些值不在数据库中,但它们总是相同的。即使它们是不同的,也应该解决这个问题 DB: 返回的原始值也是错误的。 这个问题的原因是什么?我如何解决它?也许可以尝试一种更简单的语法 v

我使用以下代码:

List<vw_GetIMeasurements> Imeasurements = context.vw_GetIMeasurements.Where(f => f.MEMBERID == userID).Distinct().ToList();
这将返回一个包含12个值的列表,虽然这些值不在数据库中,但它们总是相同的。即使它们是不同的,也应该解决这个问题

DB:

返回的原始值也是错误的。
这个问题的原因是什么?我如何解决它?

也许可以尝试一种更简单的语法

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 server中的数据库视图看起来很好,但在调试时,在共享特定属性值的行中出现了重复的行

我发现其中一个重要的唯一键来自外部联接表-因此可能为null-并且模型没有指定为唯一

我可以通过将此字段设置为ISNULLfield来解决此问题,从而确保始终返回值,并且在更新时,模型会正确地将该字段解释为唯一字段,并将其解释为复合键的一部分,并且正确地返回行


我知道有人可能会说视图设计有问题,即我不应该使用外部联接,但在本例中,有一个特定的外部联接需要。修复程序之所以有效,是因为即使返回多次,复合键仍然是唯一的。

vw_GetIMeasurements是否实现Equals和GetHashCode?能否提供一些测试数据?是,它确实实现了这些。Distinct使用默认的相等比较器。至少我相信您的支持视图有问题。我正在尝试获取多个值的列表。这种linq请求将返回一个IENUMERABLE。你可以在那之后应用一个.Tolist来得到一个列表,它给出了与问题中相同的值。甚至原始值都是错误的。我无法更改数据库,是否有其他方法可以实现这一点?您不需要更改数据库-它是设计器中的model.edmx文件,请确保实体键足够唯一,EF将尝试创建一个唯一的键,但它并不总是为视图设置正确的键。问题是所有这些值都不是唯一的,因此它们总是多次出现。我想我可以通过选择我需要的2个列而不是整行来解决这个问题。