问题出在这里:模拟交叉上下文联接 - LINQ/C#
我有2个数据上下文,我想做一个连接。现在我知道LINQ不允许从一个上下文连接到另一个上下文,并且我知道2个可能的解决方案是创建单个数据上下文或者有2个单独的查询(这是我现在正在做的)。但是我想要做的是“模拟”一个连接。
这是我试过的。
using (var _baseDataContext = Instance)
{
var query = from a in _baseDataContext.Account.ACCOUNTs
where a.STR_ACCOUNT_NUMBER.ToString() == accountID
join app in _baseDataContext.Account.APPLICATIONs on a.GUID_ACCOUNT_ID equals
app.GUID_ACCOUNT
join l in GetLoans() on app.GUID_APPLICATION equals l.GUID_APPLICATION
select l.GUID_LOAN;
return query.Count() > 0 ? query.First() : Guid.Empty;
}
private static IQueryable<LOAN> GetLoans()
{
using (var _baseDataContext = Instance)
{
return (from l in _baseDataContext.Loan.LOANs
select l).AsQueryable();
}
}
在运行时,我得到的是
System.InvalidOperationException:该查询包含对不同的数据上下文
编辑定义项的引用:
工作液:
using (var _baseDataContext = Instance)
{
var query = from a in _baseDataContext.Account.ACCOUNTs
where a.STR_ACCOUNT_NUMBER.ToString() == accountID
join app in _baseDataContext.Account.APPLICATIONs on a.GUID_ACCOUNT_ID equals
app.GUID_ACCOUNT
join l in GetLoans() on app.GUID_APPLICATION equals l.GUID_APPLICATION
select l.GUID_LOAN;
return (query.Count() > 0) ? query.First() : Guid.Empty;
}
private static IEnumerable<LOAN> GetLoans()
{
using (var _baseDataContext = Instance)
{
return (from l in _baseDataContext.Loan.LOANs
select l).AsQueryable();
}
}
我以前曾尝试返回IEnumerable,但收到了预期的转换错误。然而,我没有想过返回一个IEnuerable AsQueryable。 –
2009-05-22 16:09:49
这种方法的一个潜在问题是您没有进行纯粹的连接,因此如果您需要从贷款上下文中添加另一个连接,您将无法从我所能看到的内容中获得。 – 2009-05-22 16:14:25