ここに問題があります:クロスコンテキストジョインのシミュレート - LINQ/C#
私はジョインをしたい2つのデータコンテキストを持っています。 LINQは1つのコンテキストから別のコンテキストへの結合を許可していないことを知っています.2つの可能な解決策は、単一のdatacontextを作成するか、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();
}
}
クエリが異なるデータコンテキストに
EDITを定義したアイテムへの参照が含まれています
以前はIEnumerableを返そうとしましたが、予期したとおりにキャストエラーが発生しました。しかし、私はIEnuerableを返すことを考えなかった。 AsQueryable。 –
このアプローチの1つの潜在的な問題は、純粋な結合を行っていないということです。したがって、私が見ることができないほどの融資コンテキストから別の結合を追加する必要がある場合です。 –
これはうまくいきました。 メソッド結合のwhere句を削除することができます。メソッドからの選択を行うのではなく、純粋な結合を行うだけです。ここでのトリックは、メソッドがIEnumerableを返さなければならないことです。 .AsQueryable これにより、クロスコンテキストジョインを行うことができ、これまでのところパフォーマンスヒットは見られません。 –