Один справочный LINQ-запрос задает несколько исключений ссылок - BUG?

Я использую следующий код:

using(MainEntities mainContext = new MainEntities())
{
    return (from member in mainContext.aspnet_Membership
            where adminGroupUserIDs.Contains(member.UserId)
            select new
            {
                FullName = member.FirstName + " " + member.LastName,
                UserName = (from user in mainContext.aspnet_Users
                            where user.UserId == member.UserId
                            select user.UserName)
            }).ToList(); 
}

где adminGroupUserIDs - это IQueryable<GUID>, который формируется из запроса в другой экземпляр MainEntities.

С этим запросом LINQ жалуется, что:

Указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами.

Любые идеи, почему?

Ответ 1

Я не могу быть уверен в коде, который вы здесь показываете, но я уверен, что adminGroupUserIDs является результатом еще одного запроса, который еще не был извлечен, и был создан с другим экземпляром MainEntities. Вы не можете смешивать запросы из разных контекстов, даже не из разных экземпляров одного и того же класса контекста. Попробуйте изменить его на следующее:

var loadedAdminGroupUserIDs = adminGroupUserID.ToArray();

using(MainEntities mainContext = new MainEntities())
{
    return (from member in mainContext.aspnet_Membership
            where loadedAdminGroupUserIDs.Contains(member.UserId)
            select new
            {
                FullName = member.FirstName + " " + member.LastName,
                UserName = (from user in mainContext.aspnet_Users
                            where user.UserId == member.UserId
                            select user.UserName)
            }).ToList(); 
}

Ответ 2

Попробуйте добавить .FirstOrDefault() к вашему подзапросу.

using(MainEntities mainContext = new MainEntities())
{
    return (from member in mainContext.aspnet_Membership
            where adminGroupUserIDs.Contains(member.UserId)
            select new
            {
                FullName = member.FirstName + " " + member.LastName,
                UserName = (from user in mainContext.aspnet_Users
                            where user.UserId == member.UserId
                            select user.UserName).FirstOrDefault()
            }).ToList(); 
}