Właśnie czytałem ostatnie pytanie na temat using conditionals in Linq i przypominało mi problem, którego nie udało mi się rozwiązać. Podczas budowania Linq do zapytań SQL programowo, jak można to zrobić, gdy liczba warunków nie jest znana do czasu wykonania?Używanie warunków w Linq Programowo
Na przykład w poniższym kodzie pierwsza klauzula tworzy IQueryable, która, jeśli wykonana, wybrałaby wszystkie zadania (zwane problemami) w bazie danych, druga klauzula doprecyzuje to do kwestii przypisanych do jednego działu, jeśli został wybrany w combobox (który ma wybraną pozycję związaną z właściwością departmentToShow).
Jak mogę to zrobić, korzystając z kolekcji selectedItems?
IQueryable<Issue> issuesQuery;
// Will select all tasks
issuesQuery = from i in db.Issues
orderby i.IssDueDate, i.IssUrgency
select i;
// Filters out all other Departments if one is selected
if (departmentToShow != "All")
{
issuesQuery = from i in issuesQuery
where i.IssDepartment == departmentToShow
select i;
}
Nawiasem mówiąc, powyższy kod jest uproszczona, w rzeczywistym kodzie istnieje około tuzina klauzul udoskonalenia kwerendę opartą na użytkowników wyszukiwania i ustawienia filtra.
Właściwie jeden element na mojej liście zadań polega na wyciągnięciu jawnego polecenia i dodaniu go do interfejsu, aby użytkownik miał jakąś kontrolę. –
W powyższym wyrażeniu Lambda, jak by to działało z departmentToShow będącym kolekcją z combobox, myślałem, że to, co masz, jest dokładnie takie samo jak moje zapytanie. Muszę wyznać, że jestem początkującym, a Lambda to jedna z tych rzeczy, które mają dla mnie więcej sensu w książkach niż w praktyce. –
@Mike B: Jest podobny do tego, co masz, ale oczywiście mniej gadatliwy, a twoja pierwotna wersja zamawia przed drugim filtrem (chcesz, żeby to się stało na końcu). Jeśli 'departmentToShow' jest kolekcją, to piszesz' departmentToShow.Contains (i.IssDepartment) 'zamiast' i.IssDepartment == departmentToShow'. – Aaronaught