实体框架中的 Linq 查询出错

本文关键字:查询 出错 Linq 框架 实体 | 更新日期: 2023-09-27 18:36:14

我正在尝试通过 EF linq 查询从域对象收集值。但是我收到一个错误,请帮助我纠正这一点。

public String[] ReturnPatientIDs(int CounsellingRoomID)
{
    var messageObject = this.context.CounsellingMessages.Where(c => c.CounsellingRoomID == CounsellingRoomID).Distinct();
    String[] PatientIDs = new String[messageObject.Count()];
    for (int k = 0; k < PatientIDs.Length; k++)
    {
        PatientIDs[k] = messageObject.ElementAt(k).Chatname;
    }
    return PatientIDs;
}

LINQ to Entities 无法识别方法 'Me.Domain.General.CounsellingMessage ElementAt[CounsellingMessage](System.Linq.IQueryable'1[Me.Domain.General.CounsellingMessage], Int32)' 方法,并且此方法无法转换为存储表达式。

说明:执行当前 Web 请求期间发生未经处理的异常。请查看堆栈跟踪,了解有关错误及其在代码中起源位置的详细信息。

异常详细信息:System.NotSupported异常:LINQ to Entities 无法识别方法 'MedicalApp.Domain.General.CounsellingMessage ElementAt[CounsellingMessage](System.Linq.IQueryable'1[MedicalApp.Domain.General.CounsellingMessage], Int32)"方法,并且此方法无法转换为存储表达式。

源错误:

Line 43:             for (int k = 0; k < PatientIDs.Length; k++ )
Line 44:             {
Line 45:                 PatientIDs[k] = messageObject.ElementAt(k).Chatname;
Line 46:             }
Line 47: 

实体框架中的 Linq 查询出错

不支持

ElementAt方法。在调用 Count() 并对其ElementAt()之前,不会执行messageObject查询,并且这些查询被视为 LINQ to Entity 查询。

通过添加 Select 语句,可以将在 for 循环中执行的操作滚动到 LINQ 查询中:

public String[] ReturnPatientIDs(int CounsellingRoomID)
{
    var query = this.context.CounsellingMessages
                    .Where(c => c.CounsellingRoomID == CounsellingRoomID)
                    .Select(c => c.Chatname)
                    .Distinct();
    return query.ToArray();
}