Come faccio solo LINQ join () per collegare due IQueryables?
-
28-09-2019 - |
Domanda
Ho due IQueryables:
Ingrediente:
IngId
Description
AvailableIngredient:
IngId
Ho già un IQueryable per Ingrediente:
var ingQuery = from i in context.Ingredients
select i;
Come posso aggiungere un join alla sua in modo che i filtri da AvailableIngredient
(vale a dire un INNER JOIN)? So come si fa se dovessi aderire tutto il tempo, vale a dire da ... unirsi context.Available ... ecc), ma la registrazione è subordinata, quindi ho bisogno di usare l'altra sintassi:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
Questo non può essere il metodo giusto, quindi questo è quello che voglio fare:
- rendimenti GetAvailableIngredientQuery la query ingredienti a disposizione, vale a dire 3000 del 6000 (ma non è così enumerare i risultati ancora come è restituito come IQueryable da EF)
- Partecipa alla availableQuery al ingQuery, quindi non c'è un inner join tra le due query
Modifica
Questo è il codice Attualmente sto usando (molto veloce), ma significa codice duplicato:
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;
}
Soluzione
Usa la prima query come fonte dell'interrogazione successiva.
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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow