Первоначально я написал этот запрос, используя LINQ-to-SQL
var result = from w in PatternDataContext.Windows
join cf in PatternDataContext.ControlFocus on w.WindowId equals cf.WindowId
join p in PatternDataContext.Patterns on cf.CFId equals p.CFId
join r in ResultDataContext.Results on p.PatternId equals r.PatternId
join fi in ResultDataContext.IclFileInfos on r.IclFileId equals fi.IclFileId
join sp in sessionProfileDataContext.ServerProfiles on fi.ServerProfileId equals sp.ProfileId
join u in infrastructure.Users on sp.UserId equals u.Id
where w.Process.Equals(processName)
select u.DistributedAppId;
И когда я его выполнил и увидел result
в QuickWatch.., он показал это сообщение:
запрос содержит ссылки на элементы, определенные в другом контексте данных
В googling я нашел этот раздел в Stackoverflow, где я изучил симуляцию кросс-контекстных соединений и, как было предложено там, я немного изменил свой запрос:
var result = from w in PatternDataContext.Windows
join cf in PatternDataContext.ControlFocus on w.WindowId equals cf.WindowId
join p in PatternDataContext.Patterns on cf.CFId equals p.CFId
join r in SimulateJoinResults() on p.PatternId equals r.PatternId
join fi in SimulateJoinIclFileInfos() on r.IclFileId equals fi.IclFileId
join sp in SimulateJoinServerProfiles() on fi.ServerProfileId equals sp.ProfileId
join u in SimulateJoinUsers() on sp.UserId equals u.Id
where w.Process.Equals(processName)
select u.DistributedAppId;
Этот запрос использует эти методы SimulateXyz:
private static IQueryable<Result> SimulateJoinResults()
{
return from r in SessionDataProvider.Instance.ResultDataContext.Results select r;
}
private static IQueryable<IclFileInfo> SimulateJoinIclFileInfos()
{
return from f in SessionDataProvider.Instance.ResultDataContext.IclFileInfos select f;
}
private static IQueryable<ServerProfile> SimulateJoinServerProfiles()
{
return from sp in sessionProfileDataContext.ServerProfiles select sp;
}
private static IQueryable<User> SimulateJoinUsers()
{
return from u in infrastructureDataContext.Users select u;
}
Но даже этот подход не разрешил проблему. Я все еще получаю это сообщение в QuickWatch...:
запрос содержит ссылки на элементы, определенные в другом контексте данных
Любое решение этой проблемы? Наряду с решением я также хотел бы знать, почему проблема все еще существует, и как именно новое решение удаляет ее, так что со следующего раза я мог бы решить такие проблемы самостоятельно. Кстати, я новичок в LINQ.