2011-10-29 13 views
5

Jak używać trimstart, aby struktura encji zrozumiała, co należy zrobić?użytkownik trimstart w zapytaniu o strukturę jednostki

Oto moje zapytanie:

string number="123"; 
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number); 

Jak mogę dokonać tej pracy zapytań bez AsEnumerable (istnieje wiele pracowników w firmie 8)?

+0

Czy "Numer" jest zawsze numeryczny? –

+0

@Austin Salonen: Number is string! – Naor

+0

Rzeczywiście. Chyba chodziło mi o to, że zawartość napisów zawsze jest numeryczna (jak na przykład) lub jest czymś w rodzaju "AAK89234" jako prawidłową "liczbą"? –

Odpowiedz

10

Spróbuj użyć do tego celu SqlFunctions.PatIndex. Przetestowałem zapytanie podobne do poniższego z wartościami "000123", "000One", "abcde" i poprawnie wybrałem wiersze z wartościami "123", i "abcde".

Workers.Where(x => x.CompanyId == 8 && 
        x.Number.Substring(SqlFunctions.PatIndex("%[^0]%", x.Number).Value - 1) == number); 
-1

To dlatego wykończenia funkcje w SQL można przycinać tylko spacje tak EF obsługuje TrimStart metody, ale tylko bez parametru.

Twoje wymagania powinny w pierwszej kolejności prowadzić dyskusję na temat poprawy jakości danych w bazie danych! Twoje dane nie zapewniają wysokiej jakości obsługi tego typu zapytań w efektywny sposób.

+0

Rozumiem, co masz do powiedzenia, jest to problem, że dane przechowywane z zerami. Ale teraz jest to system i muszę znaleźć na to rozwiązanie. Dzięki. – Naor

+0

Rewizja - zgadzam się, że baza danych jest miejscem, w którym dane powinny zostać oczyszczone, ale bazy danych stron trzecich nie zawsze dają nad nimi kontrolę. Bardziej użyteczną odpowiedzią byłoby rozwiązanie tego problemu, jak wspomniał Jeff. -To wiele teoretycznych odpowiedzi i zbyt mało praktycznych na SO. – hewstone

Powiązane problemy