LINQ to Entities未返回预期结果

时间:2011-05-20 20:45:39

标签: linq-to-sql linq-to-entities linqpad

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

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

ReadmitPatientList
    .AsQueryable()
    .Where("PatientLastName.StartsWith(\"cooper\")")
    .OrderBy (rpl => rpl.PatientLastName)
    .Dump();

这就是我正在使用的linq。

linqpad将lambda显示为: EF:

ReadmitPatientList.MergeAs (AppendOnly)
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)

DB

ReadmitPatientList
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)

我无法发布结果...但EF返回同一记录的三行。 DB返回3行单独记录。和我的SQL查询一样。

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


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

1 个答案:

答案 0 :(得分:4)

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