【发布时间】:2011-07-22 17:11:40
【问题描述】:
最初我使用 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;
当我执行它并在 QuickWatch.. 中看到 result 时,它显示了以下消息:
查询包含对在不同数据上下文中定义的项目的引用
在谷歌搜索中,我在 Stackoverflow 本身找到了this topic,在那里我学习了模拟跨上下文连接,并且按照那里的建议,我将查询更改为:
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 的新手。
【问题讨论】:
标签: c# database linq linq-to-sql datacontext