Aquí está el problema:Cruz se une Contexto - LINQ/C#
tengo 2 contextos de datos que me gustaría hacer una combinación en. Ahora sé que LINQ no permite uniones de un contexto a otro, y sé que 2 posibles soluciones serían crear un solo contexto de datos o tener 2 consultas separadas (que es lo que estoy haciendo por ahora). Sin embargo, lo que me gustaría hacer es "simular" una unión.
Esto es lo que he intentado.
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();
}
}
En tiempo de ejecución lo que consigo es
System.InvalidOperationException: La consulta contiene referencias a elementos definidos en un contexto de datos diferente
EDIT:
Solución de Trabajo:
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();
}
}
Intenté devolver IEnumerable anteriormente pero recibí un error de conversión como se esperaba. Sin embargo, no había pensado en devolver un IEnuerable AsQueryable. –
un posible problema con este enfoque es que no está haciendo una unión pura, por lo tanto, si necesita agregar otra combinación fuera del contexto del préstamo, no podrá por lo que puedo ver. –
Bueno, funcionó. Podemos eliminar la cláusula where en la combinación Método y en lugar de hacer una selección del Método, simplemente realice una unión pura.El truco aquí es que el método tiene que devolver un IEnumerable. Assueryable Esto nos permite hacer combinaciones de contexto cruzadas, y hasta ahora no veo ningún golpe de rendimiento. –