2012-03-23 26 views

Trả lời

11

Hãy thử điều này:

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == DesiredField.Trim().ToUpper()) 

Ngoài ra, tôi sẽ đề nghị để thiết lập các thông số bên ngoài truy vấn:

var value = DesiredField.Trim().ToUpper(); 

... 

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == value) 
+0

điều này sẽ được dịch chính xác? –

+0

Có, phương thức ToUpper() sẽ được dịch là UPPER (trường) trong truy vấn SQL của bạn. –

+0

ivowiblo: Tôi khiêm tốn thú nhận bạn đã đúng, phương pháp ContainsLike của tôi sẽ không được dịch sang SQL. Vui lòng xem nhận xét của tôi cho câu trả lời của tôi để biết thêm chi tiết. Nhờ bạn, với tất cả sự khiêm nhường của tôi. –

4

Sử dụng này:

q => q.Where(entity => 
    String.Equals(entity.CaseInsensitiveField , CaseInsensitiveField , 
        StringComparison.OrdinalIgnoreCase)); 

CẬP NHẬT

Nó xuất hiện (ít nhất là qua LinqPad) rằng ở trên sẽ không chuyển thành SQL, vì vậy tôi sẽ đề nghị, như ivowiblo đã gợi ý:

var comparisonValue = CaseInsensitiveField.ToUpper(); 
q => q.Where(entity => 
    entity.CaseInsensitiveField.ToUpper() == comparisonValue); 

Lý do để đặt ToUpper trước đó là các chức năng thủ tục thường là wor se trong SQL, và vì đây không phải là một trường cơ sở dữ liệu, chúng ta có thể gửi nó đã được viết hoa.

+0

+1 Nice one, không biết về nó! Cám ơn vì đã chia sẻ! –

+0

String.Equals sẽ được dịch một cách chính xác? –

+0

'string.Equals' hoặc' entity.CaseInsensitiveField == 'là giống nhau, vì vậy có nó được dịch như là một so sánh đơn giản giống như bạn làm. –

Các vấn đề liên quan