Filtrowanie w Entity Framework

0

Cześć,

Do tej pory miałem większą styczność z Nhibernate - tam filtrowanie standardowo robiłem pisząc klasę *Filter i potem dzięki Api QueryOver bądź Criteria
mogłem sobie po kolei sprawdzać każdy warunek który mnie interesuje z filtra.

Nie jestem pewien jak uzyskać efekt takiego filtrowania 'po kolei' w Entity Frameworku ( i czy to w ogóle dobra praktyka ) zakładając, że mój obiekt filtra może mieć około 10-15 restrykcji na property.

Coś możecie doradzić?

0

takie sortowanie w linq można zrobić poprzez OrderBy i następnie ThenBy. Jeśli chcesz sortować po jakichś swoich warunkach możesz stworzyć klasę , która dziedziczy po interfejsie IComparer i następnie w niej określać warunki porównań. Z drugiej strony skomplikowane operacje sortowania wykonywałbym po stronie bazy bo ona najlepiej sobie z tym poradzi.

0

@error91: dopóki nie zrobisz przykładowo: ToList() to wszystkie operacje i tak będą "wykonywane po stronie bazy danych". Puszczone zostanie zapytanie z orderem i dostaniesz już posortowaną kolekcję.

https://stackoverflow.com/questions/13827004/linq-to-entities-orderby-tolist-vs-tolist-orderby

0

Dziękuję za odpowiedzi jednak nie zrozumielismy się ;d
Nie chodzi mi o sortowanie a o filtrowanie danych wyciąganych z bazy (takie budowanie zapytania w oparciu o filtr)

0

Nie miałem zbyt dużo do czynienia z EF na rzecz właśnie NH to nie wiem czy będę Ci w stanie pomóc ale zawsze możesz zwyczajnie zwariantować zapytania przed wysłaniem do bazy. Coś w stylu: https://stackoverflow.com/questions/21600812/filtering-data-from-entity-framework

Z uwagami, które są tam napisane.

0

@grzesiek51114: tak , ale tylko wtedy gdy wcześniej nie zmaterializowałeś zapytania i operujesz na IQueryable. Poza tym ORM nie zawsze generuje optymalne zapytanie więc wolę napisać sobie procedurę po stronie bazy lub jakiś widok jeśli w grę wchodzi wydajność.

0

W EF to filtrowania danych używa się generalnie LINQ. I jak najbardziej możesz do już zdefiniowanego zapytania dokładać nowe warunki, możesz też te warunki opakować w metody/klasy.

0

klepiesz w kółko <Iqueryable>.Where()...Where a jak juz bedzieszchcial sobie dane pobrać walisz je do arraya, czy czegokolwiek. z reszta w nHibernate tak samo się to robi przecież =x. to ze uzywales sobie jakiegos api to inna sprawa

1 użytkowników online, w tym zalogowanych: 0, gości: 1