Hola usuario de nuestra web, hemos encontrado la solución a tu búsqueda, deslízate y la hallarás a continuación.
Solución:
La técnica que está utilizando no es realmente una carga explícita (Include
/ ThenInclude
), pero el truco se basa en la proyección y la corrección de la propiedad de navegación de EF Core, por lo que no puedo decir por qué deja de funcionar. EF Core aún procesa proyecciones e incluye de manera diferente, por lo que podría ser un defecto en el procesamiento actual.
La implementación de la inclusión condicional en el nivel de consulta raíz es relativamente fácil. Tenga en cuenta que el Include
el método comienza desde (se define para) IQueryable
y el devuelto IIncludableQueryable
es también IQueryable
. Lo que significa que puedes mantener IQueryable
consultar variable y aplicar transformaciones condicionales similares a encadenadas Where
operadores.
Para hacerlo más fácil, puede crear un método de extensión auxiliar personalizado como este:
public static IQueryable If(
this IQueryable source,
bool condition,
Func, IQueryable> transform
)
return condition? transform(source) : source;
y usarlo así:
_context.Investors.Where(s => s.Id == userId)
.If(flagCoins, q => q.Include(e => e.Coins)
.ThenInclude(e => e.CoinType))
.If(flagBricks, q => q.Include(e => e.Bricks))
Si necesita algo similar para los niveles anidados (ThenInclude
), luego agregue los siguientes 2 métodos de extensión:
public static IQueryable If(
this IIncludableQueryable source,
bool condition,
Func, IQueryable> transform
)
where T : class
return condition ? transform(source) : source;
public static IQueryable If(
this IIncludableQueryable> source,
bool condition,
Func>, IQueryable> transform
)
where T : class
return condition ? transform(source) : source;
que le permitirá utilizar algo como esto:
_context.Investors.Where(s => s.Id == userId)
.If(flagCoins, q => q.Include(e => e.Coins)
.If(flagCoinType, q2 => q2.ThenInclude(e => e.CoinType)))
.If(flagBricks, q => q.Include(e => e.Bricks))
Si sostienes alguna desconfianza o capacidad de acrecentar nuestro artículo eres capaz de dejar una glosa y con deseo lo leeremos.