Filtrowanie w Entity Framework

Filtrowanie w Entity Framework
  • Rejestracja: dni
  • Ostatnio: dni
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ć?

E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 395
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.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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

  • Rejestracja: dni
  • Ostatnio: dni
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)

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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.

E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 395
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ść.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

O9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.