Linq to sql LINQ到实体未返回预期结果

Linq to sql LINQ到实体未返回预期结果,linq-to-sql,linq-to-entities,linqpad,Linq To Sql,Linq To Entities,Linqpad,我使用视图返回一个复杂的搜索查询。当我使用linq查询EF时,它将返回同一行3次(实际行数是正确的) 使用LinqPad,我对ef实体和实际数据库视图运行了相同的linq ReadmitPatientList .AsQueryable() .Where("PatientLastName.StartsWith(\"cooper\")") .OrderBy (rpl => rpl.PatientLastName) .Dump(); 这就是我在两者中使用的lin

我使用视图返回一个复杂的搜索查询。当我使用linq查询EF时,它将返回同一行3次(实际行数是正确的)

使用LinqPad,我对ef实体和实际数据库视图运行了相同的linq

ReadmitPatientList
    .AsQueryable()
    .Where("PatientLastName.StartsWith(\"cooper\")")
    .OrderBy (rpl => rpl.PatientLastName)
    .Dump();
这就是我在两者中使用的linq

linqpad将lambda显示为: 环境足迹:

分贝

我无法发布结果…但EF返回同一记录的三行。DB返回3行单独的记录。我的sql查询也是如此

我的EF LINQ如何?我需要更改以使其正常工作



如果在sql资源管理器中运行,EF Linq查询生成的sql代码实际上会返回正确的结果。

如果患者实体没有主键或推断为主键的列在结果集中的多个记录中相同,则会发生这种情况。EF使用内部标识映射,这要求每个唯一标识的记录必须重用实体的同一实例。因此,如果您从数据库中返回三条具有相同EF唯一标识的记录,则将返回三个相同实例的枚举,这些实例表示结果集中的第一条记录(有关标识映射的更多信息)。在Linq to sql的DataContext中也存在同样的行为。

我不确定自己是否理解。行数是否如3或1中所示正确?您可以尝试.Where(“it.PatientLastName,比如'cooper%')。行数应该是同一个人的3条唯一记录。(即三次不同的访问)EF查询返回同一记录3次。直接数据库查询正在返回correctly@ours我用同样的方法尝试了它,结果与EF相同,它对直接的DB.GAH不起作用…你知道吗,我想我为get添加了一个key属性到ROWID字段…让我试试,然后再回复你。好的,将key属性添加到ROWID属性不起作用。RowID是GUID,因此它将是唯一的。我该如何解决这个问题?因为我使用的是视图,即使是存储过程也会有这个问题,我假设。erm..只是为了澄清一下,我将密钥添加到了我的DomainService元数据文件中。我不知道如何使用linq,但我的应用程序在重新编译后仍显示相同的行为。好的,在我的模型图中,我可以看到它似乎推断patientID是keyvalue,这是不正确的。我想我找到了如何修复它,我在edmx中编辑了实体,并将推断的键更改为我现在要测试的rowid。
ReadmitPatientList.MergeAs (AppendOnly)
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)
ReadmitPatientList
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)