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