2013-07-17 11 views
7

Czy istnieje sposób, aby dowiedzieć się, czy obiekt IQueryable ma OrderBy stosowane w jego drzewa wyrażenie?Sprawdź, czy IQueryable Linq ma zamówienie przez zastosowanie

Scenariusz, który mam, to to, że kontrolka siatki ma włączone stronicowanie i sortowanie na kolumnę. Jednak domyślnie nie ma sortowania, więc w tym przypadku Linq do SQL ma strasznie duży wybór dla liczby wierszy, więc we wszystkich scenariuszach muszę podać zamówienie, jednak powinienem zastosować tylko domyślną kolejność według klucza podstawowego jeśli nie określono innego zamówienia.

Czy to możliwe?

+1

Jedynym sposobem, jaki mogę wymyślić jest wykonanie zamówienia i sprawdzenie, czy zamówienie jest takie samo, lub ustawienie wartości logicznej podczas zamawiania, edycja krótsza może polegać na porównaniu elementów, aby sprawdzić, czy są one zamówione. – Sayse

+0

W jaki sposób orderby (id) pomoże ci wybrać ogromną? – usr

+0

@usr Linq2Sql będzie używał WSZYSTKICH KOLUMNÓW w jego 'SELECT ROW_NUMBER() OVER (ORDER BY Grofit

Odpowiedz

6

Możesz dowiedzieć się, sprawdzając drzewo wyrażenia zapytania, używając niestandardowego ExpressionVisitor lub dowolnego wybranego mechanizmu rekursywnego przejścia.

Wyczuwam, że twój kod nie jest dobrze zaprojektowany. Prawdopodobnie powinieneś po prostu zapisać ten fakt, że zamówienie zostało zastosowane gdzieś jako bool. Być może przepływ informacji w Twojej aplikacji wymaga rearchitekcji.

Dzięki tej metodzie inspekcji odzyskujesz te informacje w hackish way.

+0

O tak, nie ma wątpliwości, że to źle zaprojektowany kod, niestety, ponieważ jestem ograniczony przez moich klientów wybory technologiczne od czasów prehistorycznych jestem ograniczony w moich wyborach, aby rozwiązać podstawowy problem, a kontrola siatki * może * mieć zastosowany sortowanie domyślne, ale ktoś może wyłączyć sortowanie co powodowałoby problemy, więc pracowało nad zapytaniem bazowym (ponieważ przechodzi przez wspólny interfejs do przetwarzania przed użyciem przez siatkę). – Grofit

Powiązane problemy