2013-01-18 14 views
25

Powiel możliwe:
LINQ Contains Case InsensitiveEntity Framework - wielkość liter nie zawiera?

Chcę rozwiązanie tego problemu, który nie wiąże ToUpper lub ToLower, jak używać w kodzie poniżej;

var upper = term.ToUpper(); 
using (var db = this.DataContext) 
{ 
    return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList(); 
} 

Używam entitly ramy C# więc rozwiązanie z użyciem StringComparison.CurrentCultureIgnoreCase nie działa. Działa dla Equals, EndsWith i StartsWith, ale nie dla Contains.

+0

Być może ta odpowiedź jest jednym można zatrudnić: http://stackoverflow.com/a/444818/3312 –

+0

możliwe duplikat [LINQ Zawiera wielkość liter ma znaczenie] (http://stackoverflow.com/questions/ 3360772/linq-zawiera-case-niewrażliwy) lub [Rozróżnianie wielkości liter zawiera (ciąg)] (http://stackoverflow.com/questions/444798/case-insensitive-containsstring) –

+1

Żadne z nich nie ma zastosowania. Rozwiązania te nie działają w strukturze podmiotowej, jak starałem się wskazać w drugim akapicie pytania. – arame3333

Odpowiedz

-3

Wystarczy dodać .ToLoWer() z upper

using (var db = this.DataContext) 
      { 
       return db.Counties 
         .Where(x => x 
         .CountyName.ToLower() 
         .Contains(upper.ToLoWer())).ToList(); 
      } 
+4

Jeśli czytasz to pytanie, zaznaczam, że nie chcę tego używać jako odpowiedzi. – arame3333

+0

W tej chwili jest to jedyna odpowiedź, jaką mogę znaleźć? – Zapnologica

+3

Ta odpowiedź pomogła mi haha ​​... Właśnie zamieniłem się na używanie niższego zamiast górnego .. dzięki kolego! – bboyle1234

3

używam EF6 i SQL Server i Contains jest odwzorowywany LIKE '%@p0%' który nie uwzględnia wielkości liter w moim przypadku. W moim przypadku:

db.Counties.Where(x => x.CountyName.Contains(term)).ToList(); 

działa zgodnie z potrzebami. Więcej informacji w Sjoerd answer.

+1

W twoim przypadku oznacza to tylko, że masz skonfigurowane sortowanie Insensitive DB Case. Nic dodać nic ująć. – Tomas

+0

W moim przypadku mogę uruchomić zapytanie i rozróżniana jest wielkość liter. Myślę więc, że @ Tomas to wymyślił, ale byłoby świetnie, gdyby EF mógł dodać funkcję do określenia. Ponieważ w jednym zapytaniu można chcieć ustawić wielkość liter, a wielkość liter w innym. – Zapnologica

5

wiem, że to nie jest związane bezpośrednio do EF, ale jedynym rozwiązaniem mogę myśleć jest zmiana DB kolumny tabeli sortowania być wielkość liter ma znaczenie np:

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(100) COLLATE Latin1_General_CI_AS NULL 

CI - sprawa niewrażliwe/ CS - wielkość liter

AS - akcent wrażliwy/ AI - akcent niewrażliwe (może być również użyteczny)

Jeśli nie można zmienić sortowanie kolumny tabeli można użyć bezpośredniego zapytania z EF z wymuszania współpracy llation

select * 
from table 
where country collate Latin1_General_CI_AS != @country 
Powiązane problemy