LINQ Query返回第一个结果的多个副本

我有一个在数据库中定义的视图(archiveContentPreviews),它将几个表连接在一起,在Linq中它有一个实体键(ArchiveID),我想用这个简单的查询查询这个视图:

var x = from fields in entities2.archiveContentPreviews where fields.ArchiveID == archiveID select fields; return x.ToList(); 

它返回确切的结果数但是第一个结果的多个副本的问题,当我在SQL管理工作室中执行该查询时,它返回正确的结果,任何帮助?!

当指定为主键的列(或多个列)在视图中没有唯一值时,通常会发生这种情况。 在您的情况下, ArchiveID可能在大量视图行中重复(也由where子句指示)。 您必须找到(或添加到视图)列的组合,这些列唯一地标识视图行并将其标记为EF模型中的主键。

请注意,生成的SQL查询返回的数据可能包含具有不同值(但具有相同的ArchiveID )的行,但EF只是为每个ArchiveID实现实体对象,并且可以为该ID找到第一个结果。

请注意一个解决方法(如果您不能指定其他键 – 例如,对于您不管理的数据表但只是只读访问权限等)是选择查询中的各个列。

 var x = from fields in entities2.archiveContentPreviews where fields.ArchiveID == archiveID select new {fields.col1, fields.col2}; return x.ToList();