2009-06-13 2 views
39

Próbuję zbudować stronę wyszukiwania przy użyciu LINQ do Entities, ale poniższy kod daje mi błąd runtime o l.t.e. nie rozpoznaje 'Boolean StartsWith(). Kod kompiluje się dobrze. Jak mogę obejść to lepiej niż wysyłanie Startów z filtrowaniem do zapisanego proc?Problem z LINQ do encji i String.Starts z

return from dp in dents.DirectoryPersonEntrySet 
      where 
       ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) 
      select dp; 
+0

Czy możesz opublikować "poniższy kod"? Czy może tematem jest pełny kod? Masz na myśli String.StartsWith zamiast Boolean.StartsWith? –

+0

@Rutger, dzięki, byłem zbyt szybki, aby trafić wysłać i zapomniałem kod. Poprawiłem również podpis. – ProfK

+0

Jest co najmniej 6 nawiasów w nadmiarze, a wciąż brakuje nam prototypu funkcji i definicji klasy ... – em70

Odpowiedz

77

Zgaduję, że EF nie obsługuje przeciążenia StartsWith, który pobiera parametr StringComparison.

Należy wspierać startswith, endswith i Zawiera, więc może można spróbować:

dp.LastName.StartsWith(searchTerm) 

czyli

dp.LastName.ToLower().StartsWith(searchTerm) 

a następnie upewnij się, że searchTerm jest również małe .

+2

Dead all, opcja całego łańcucha thang throws EF – ProfK

+0

Pracowałem jako charm, dziękuję –

+1

Zgadnij poprawnie, ale pamiętaj, że nie ma znaczenia, gdy jest przetłumaczone na SQL. – marsze