Mam dwa IQueryables:Jak mogę po prostu LINQ Join() połączyć dwa IQueryables?
składnika:
IngId
Description
AvailableIngredient:
IngId
Mam już IQueryable dla składnika:
var ingQuery = from i in context.Ingredients
select i;
Jak dodać do niego sprzężenie, aby filtrował przez AvailableIngredient
(tj. Wewnętrzne dołączenie)? Wiem, jak to zrobić, gdybym musiał dołączyć cały czas, tj. Z ... dołączenia do kontekstu.Dostępne ... itd.), Ale dołączenie jest warunkowe, więc potrzebuję użyć innej składni:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
ten nie może być dobrym sposobem, aby to, co chcę zrobić:
- GetAvailableIngredientQuery zwraca dostępnych składników zapytanie, tj 3000 z 6000 (ale nie wyliczać jeszcze wyniki jako to jest zwrócony jako IQueryable z EF)
- Dołącz do availableQuery do ingQuery, więc istnieje sprzężenie wewnętrzne między dwoma zapytaniami
EDIT:
Jest to kod obecnie używam (bardzo szybko), to znaczy, ale kod powielony :
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;
}
To już mam. Czytaj moją edycję (która pojawiła się przed twoją odpowiedzią), i powoduje to ogromną duplikację. Jest to również nieprawidłowa składnia. Nie możesz użyć '==' musi być 'równa się'. Dzięki i tak. – GenericTypeTea
Wypróbuj nowe rozwiązanie. Musiałeś przegapić twoją wcześniejszą edycję ... – Clicktricity
Dzięki, na pewno wygląda na to, że zadziała (nie wiem, dlaczego to wypróbowałem)! Niestety, w tej chwili jestem w stanie całkowicie nietrwałym, więc spróbuję trochę. – GenericTypeTea