实体框架中的 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:
不支持
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();
}