I have two IQueryables:
Ingredient:
IngId
Description
AvailableIngredient:
IngId
I already have an IQueryable for Ingredient:
var ingQuery = from i in context.Ingredients
select i;
How can I add a join to his so it filters by AvailableIngredient
(i.e. an Inner Join)? I know how to do it if I had to join all the time, i.e. from... join context.Available... etc), but the Join is conditional, so I need to use the other syntax:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
This may not be the right method, so this is what I want to do:
- GetAvailableIngredientQuery returns the available ingredients query, i.e. 3000 of 6000 (but it doesn't enumerate the results yet as it's returned as an IQueryable from EF)
- Join the availableQuery to the ingQuery, so there's an Inner Join between the two queries
EDIT:
This is the code I'm currently using (very fast), but it means duplicated code:
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;
}