linq-to-sql – LINQ to Entities未返回预期结果

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

使用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)

D B

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

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

我需要更改我的EF LINQ才能使其正常工作?

EF Linq查询生成sql代码如果在sql Explorer中运行,则实际返回正确的结果.

解决方法

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...