Следующий код вызывает ошибку «Этот запрос содержит ссылки на элементы, определенные в другом контексте данных». Мои 2 контекста данных создаются с двумя вложенными элементами, используя блоки вокруг кода, который вызывает этот метод и отображает результаты на экране. Методы, которые вызывает этот метод, используют только передаваемый им контекст данных, они не создают своих собственных. Я проверил, что они в порядке, вставив дополнительный оператор возврата прямо перед тем, как в методе ниже, и у меня не возникло никаких проблем, что заставляет меня поверить, что проблема в операторе LINQ в строке возврата ... я делаю не так?
public static IQueryable<tblSurveyor> GetPossibleSurveyorsForSurvey(SurveyDataContext surveyContext,
FINDataContext finContext, int surveyID)
{
IQueryable<tblSurveyor> currentSurveyors =
GetSurveyorsForSurvey(surveyContext, surveyID);
tblSurvey currentSurvey = GetSurvey(surveyContext, surveyID);
tblLocContact facility = GetFacility(finContext, currentSurvey.FacilityID);
IQueryable<tblSurvey> surveysInState = GetSurveysInState(surveyContext, finContext,
facility.State);
return from task in surveyContext.tblSurveyor_Tasks
from surveys in surveysInState
from cSurveyor in currentSurveyors
from surveyors in surveyContext.tblSurveyors
where surveyors.SurveyorID != cSurveyor.SurveyorID &&
surveys.SurveyID == task.SurveyID &&
task.SurveyorID == surveyors.SurveyorID
select surveyors;
}
Я изменил несколько вещей, и, самое главное, я избавился от переменных IQueryable и сделал их массивами. Это было в первую очередь, чтобы заставить перечисление, как я пошел. Это выявило эту проблему (или хотя бы одну проблему в этом методе).
tblSurvey[] surveysInState = GetSurveysInState(surveyContext, finContext,
state).ToArray();
Вот реализация этого метода. Я до сих пор не вижу проблемы с этим.
public static IQueryable<tblSurvey> GetSurveysInState(SurveyDataContext surveyContext,
FINDataContext finContext, string state)
{
return from survey in surveyContext.tblSurveys
from facility in finContext.tblLocContacts
where survey.FacilityID == facility.LocationID && facility.State == state
select survey;
}