Không bao giờ sử dụng .ToLower()
để thực hiện so sánh không phân biệt chữ hoa chữ thường. Đây là lý do tại sao:
- Có thể sai (đối chiếu ứng dụng khách của bạn có thể là tiếng Thổ Nhĩ Kỳ, còn đối chiếu DB của bạn thì không).
- Nó rất cao không hiệu quả; SQL được gửi là
LOWER
thay vì=
với đối chiếu không phân biệt chữ hoa chữ thường.
Thay vào đó, hãy sử dụng StringComparison.OrdinalIgnoreCase
hoặc StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Nhưng đối với Contains()
có vấn đề:Không giống như Equals
, StartsWith
, v.v., nó không có quá tải cho StringComparison
tranh luận. Tại sao? Câu hỏi hay; hỏi Microsoft.
Điều đó, kết hợp với giới hạn của SQL Server về LOWER
có nghĩa là không có cách nào đơn giản để làm những gì bạn muốn.
Các giải pháp khả thi có thể bao gồm:
- Sử dụng chỉ mục văn bản đầy đủ và thực hiện tìm kiếm theo một quy trình.
- Sử dụng
Equals
hoặcStartsWith
thay vào đó, nếu có thể cho nhiệm vụ của bạn - Thay đổi đối chiếu mặc định của cột?