私は2つのIQueryablesを持っています:
成分:
IngId
Description
利用可能な成分:
IngId
私はすでに Ingredient の IQueryable を持っています:
var ingQuery = from i in context.Ingredients
select i;
彼に結合を追加して、フィルター処理するAvailableIngredient
(つまり、内部結合) にはどうすればよいですか? 常に参加する必要がある場合、つまり from... join context.Available... など) の方法は知っていますが、Join は条件付きであるため、他の構文を使用する必要があります。
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
これは正しい方法ではないかもしれないので、これが私がやりたいことです:
- GetAvailableIngredientQuery は、利用可能な成分のクエリ、つまり 6000 のうち 3000 を返します (ただし、EF から IQueryable として返されるため、結果はまだ列挙されていません)。
- availableQuery を ingQuery に結合して、2 つのクエリ間に内部結合があるようにします。
編集:
これは私が現在使用しているコードです(非常に高速です)が、重複したコードを意味します:
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;
}