問題出在這裏:模擬交叉上下文聯接 - 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