Один справочный 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();
}