Mam zapytanie LINQ, które składa się z anonimowego obiektu.Dynamicznie konstruuj zapytanie "LIKE" w LINQ do SQL
W danym punkcie chcę ograniczyć wyniki przez przychodzące parametry wyszukiwania, ale może to być jeden lub więcej parametrów i chcę wykonać "LIKE X LUB LIKE y LUB LIKE z" używając tych parametrów.
W kodzie, to będzie wyglądać następująco:
reservations = reservations.Where(r =>
r.GuestLastName.Contains(parameter1) || r.GuestFirstName.Contains(parameter1) ||
r.GuestLastName.Contains(parameter2) || r.GuestFirstName.Contains(parameter2) ||
// Parameter 3, 4, 5,..
);
Jak mógłbym skonstruować ten dynamicznie, wiedząc, że reservations
jest typu IQueryable<'a> (anonymous object)
? Rozglądałem się po różnych zasobach i mogę tylko znaleźć sposób, aby to zrobić, gdy znam typ, a nie przy użyciu typów anonimowych.
Ważne jest, aby wiedzieć, że to jest LINQ do SQL, więc powinno być przetłumaczone na zapytaniu SQL i nie może być filtrowane w pamięci ...
To rozwiązanie wymaga podania przez użytkownika wyrażenia lambda do podpisu funkcji. O ile zrozumiałem twoje pytanie, twoim wymaganiem było zbudowanie ich dynamicznie. Jako przykład rozważ, że masz wywoływane działanie w wyniku żądania GET w środowisku WEB. W parametrach zapytania nazwy właściwości do filtrowania są wysyłane na serwer wraz z ich możliwymi wartościami. W twoim przypadku musisz konstruować wyrażenia lambda na podstawie nazw właściwości, które otrzymałeś od klienta, zamiast tylko przekazywać je dalej do funkcji filtrowania. – jwaliszko