¿Cómo acabo de LINQ join () para enlazar dos IQueryables?
-
28-09-2019 - |
Pregunta
Tengo dos IQueryables:
Ingredientes:
IngId
Description
AvailableIngredient:
IngId
Ya tengo una IQueryable por Ingrediente:
var ingQuery = from i in context.Ingredients
select i;
¿Cómo añadir una unión a su por lo que los filtros por AvailableIngredient
(Join es decir, un interior)? Yo sé cómo hacerlo si tuviera que unir todo el tiempo, es decir, desde ... unirse a context.Available ... etc), pero la unión es condicional, así que tengo que usar la otra sintaxis:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
Esto puede no ser el método correcto, así que esto es lo que quiero hacer:
- retornos GetAvailableIngredientQuery Los ingredientes de consulta disponibles, es decir, 3000 de 6000 (pero no lo hace enumerar los resultados sin embargo, ya que es devuelto como un IQueryable de EF)
- Únete a la availableQuery a la ingQuery, por lo que hay una unión interna entre las dos consultas
EDIT:
Este es el código que estoy usando actualmente (muy rápido), pero significa código duplicado:
IQueryable<Ingredient> query;
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
query = from item in context.Ingredients
// Quite a few `where` clauses and stuff
join t in availableQuery on item.IngId equals t.IngId
select item;
}
else
{
query = from item in context.Ingredients
// The SAME `where` clauses and stuff as above
select item;
}
Solución
Usar la primera consulta como el origen de la consulta posterior.
IQueryable<Ingredient> query = from item in context.Ingredients
// Quite a few `where` clauses and stuff
select item;
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
query = from item in query
join t in availableQuery on item.IngId equals t.IngId
select item;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow