У меня есть два IQueryables:
Ингредиенты:
IngId
Description
AvailableIngredient:
IngId
У меня уже есть IQueryable для Ingredient:
var ingQuery = from i in context.Ingredients
select i;
Как я могу добавить соединение к нему, поэтому он фильтрует AvailableIngredient
(т.е. Inner Join)? Я знаю, как это сделать, если мне приходилось все время присоединяться, т.е. Из... join context.Available... и т.д.), Но Join является условным, поэтому мне нужно использовать другой синтаксис:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
Это не может быть правильный метод, поэтому я хочу это сделать:
- GetAvailableIngredientQuery возвращает запрос доступных ингредиентов, т.е. 3000 из 6000 (но это не перечислить результаты пока возвращается как IQueryable из EF)
- Присоединяйся к доступному окну в ingQuery, так что есть Внутренняя связь между двумя запросами
EDIT:
Это код, который я сейчас использую (очень быстро), но это означает дублированный код:
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;
}