La simulation de la Croix Contexte Rejoint--LINQ/C#

Voici la question:

J'ai 2 données de contextes que je voudrais faire une jointure sur. Maintenant, je sais que LINQ n'autorise pas les jointures d'un contexte à un autre, et je sais que 2 solutions possibles serait de créer un seul datacontext ou d'avoir 2 séparés des requêtes (qui est ce que je fais pour l'instant). Cependant, ce que je voudrais faire est de "simuler" une jointure.

Voici ce que j'ai essayé.

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();
    }
}

Au moment de l'exécution j'obtiens est

Système.InvalidOperationException: La requête contient des références à des articles définis sur un autre contexte de données

EDIT:

Solution De Travail:

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();
    }
}

OriginalL'auteur David Yancey | 2009-05-22

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *