2

我正在尝试通过 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.Coun sellingMessage ElementAt[Coun sellMessage](System.Linq.IQueryable`1[Me.Domain.General.Coun rollingMessage], Int32)' 方法,并且无法将该方法翻译成商店表达式。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NotSupportedException:LINQ to Entities 无法识别方法“MedicalApp.Domain.General.Coun sellingMessage ElementAt[Coun sellingMessage](System.Linq.IQueryable`1[MedicalApp.Domain.General.Coun rollingMessage], 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: 
4

1 回答 1

2

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

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

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

    return query.ToArray();
}
于 2013-10-21T00:48:05.163 回答