2015-01-09 8 views
6

Obecnie próbuję dodać zamówienie do kwerendy LINQ, która nakaże przez pole datetime w obiekcie EF:Zamówienie przez (rosnąco | desc) w LINQ do SQL Server obsługuje DateTime inaczej

return this.SortingDirection.Equals("asc", StringComparison.InvariantCultureIgnoreCase) ? entities.OrderBy(e => e.ProcessStartTime) : entities.OrderByDescending(e => e.ProcessStartTime); 

Gdy SortingDirection jest ustawiony na desc, działa dobrze. Ale po ustawieniu na asc nie otrzymuję żadnych nagrań!

Po obejrzeniu programu SQL Server Profiler okazuje się, że obiekty DateTime są formatowane inaczej!

Dla DESC:

ORDER BY [Project1].[StartTime] DESC',N'[email protected]__linq__22='2015-01-07 09:00:23',@p__linq__23='2015-01-07 09:00:23',@p__linq__24='2015-01-07 09:05:30',@p__linq__25='2015-01-07 09:05:30' 

i ASC:

ORDER BY [Project1].[StartTime] ASC',N'[email protected]__linq__22='2015-07-01 09:00:23',@p__linq__23='2015-07-01 09:00:23',@p__linq__24='2015-07-01 09:05:30',@p__linq__25='2015-07-01 09:05:30' 

dniach i miesiącach zostały zamienione, powodując zapytania SQL nie zwraca wyników.

To dla mnie sugeruje, że metoda IQueryable.OrderBy() nie używa poprawnego lokalnego formatu/innego formatu do OrderByDescending(), czy może to być błąd w EF?

Czy jest coś w moim łączącym łańcuchu, który mógłbym dodać, aby wymusić ten lub inny sposób, w jaki mogłem sortować według tych dat?

Moja konfiguracja:

  • .NET 4.5
  • Entity Framework 5.0.0
  • SQL Server 2012 Standardowy

Dziękujemy

+1

Jak to możliwe, że * konkretna * wartość datetime, np. "2015-01-07", jest zaangażowany w klauzulę kolejności zamówienia? –

+0

możliwy duplikat powiązania [MVC DateTime z nieprawidłowym formatem daty] (http://stackoverflow.com/questions/528545/mvc-datetime- binding-with-incorrect-date-format) – user2831628

Odpowiedz

2

Nie pokazać LINQ zapytanie, ale natychmiast przychodzą na myśl dwie rzeczy. Po pierwsze, SQL Server ma swoje własne ustawienia globalizacji, a po drugie, jeśli daty są paramertyzowane (które linq powinno zawsze robić), nie powinieneś przejmować się formatami ciągów daty.

0

Więc problem, który mam, nie ma nic wspólnego z SQL lub EF, Okazuje się, że problem dotyczy Mvc. Nie ustawiłem kultury w Web.Config na kulturę niezmienniczą ("en"). Powoduje to, że warunek filtru (w tym przypadku ProcessorStartTime) zostanie sparsowany jako amerykański łańcuch daty, ponieważ .NET wydaje się domyślnie en-US, jeśli w konfiguracji nie jest ustawiona żadna kultura (patrz ta question).

Nie widziałem tego, dopóki nie spróbowałem posortować zestawu wyników. Tworzymy nowy link MvcHtmlString na przycisku sortowania, który zawierał warunki filtra dla ProcessorStartTime. W ten sposób przeanalizowano ciąg daty i zmieniono dni i miesiące. Po kliknięciu na link, zostanie ona parsesd powrotem do DateTime jak to, które spływały do ​​LINQ, a tym samym powodując rodzaj powrotu żadnych wyników (więcej informacji na temat daty MVC za obsługę in this question.

Powodem OrderByDescending() działa było to, że przycisk sortowania jest przełącznikiem pomiędzy offsem, asc | desc, więc ponownie zamienił dni i miesiące z powrotem na to, jak powinny być!

W celu uzyskania dalszych informacji, upewnij się, że masz ten zestaw w konfiguracji sieci Zaznaczę to jako duplikat, ponieważ nie jest to nic nowego w SO. Dziękuję wszystkim za te, które wysłali (szczególnie.ty Cylon, wskazał mi w dobrym kierunku^^)

Powiązane problemy