2011-11-22 6 views
6

Khi sử dụng Contains với LINQ động trên LINQ-to-objects, tìm kiếm phân biệt chữ hoa chữ thường. Tôi muốn để có thể tìm kiếm trường hợp không nhạy cảm (như Linq-to-sql, gây ra SQL server thực hiện điều này theo mặc định).Không phân biệt chữ hoa chữ thường với Dynamic Linq

Cái gì như:

this.someQuery = this.someQuery.Where(field + ".Contains(@0, true)", strValue); 

nơi true có nghĩa là: caseinsensitive = true, như một trong những phần mở rộng của System.String.Contains cung cấp. Mặc dù tôi không thể sử dụng các tiện ích mở rộng cho System.String với LINQ động theo mặc định.

+0

Có vẻ như 'this.someQuery = this.someQuery.Where (trường + "ToLower(). Chứa (@ 0, true)", strValue.ToLower());' công trinh. Tôi đã thực hiện một số thay đổi đối với Dynamic.cs, vì vậy tôi không biết liệu nó có hoạt động theo mặc định hay không. –

+0

bản sao có thể có của [LINQ chứa đựng phân biệt chữ hoa chữ thường] (http://stackoverflow.com/questions/3360772/linq-contains-case-insensitive) – Sjoerd

+0

Không trùng lặp vì đó không phải về LINQ động. –

Trả lời

13

Bạn có thể chỉ .ToLower() cả hai mặt của so sánh? Một cái gì đó như thế này:

this.someQuery = this.someQuery.Where(field.ToLower().Contains(strValue.ToLower())); 

Hoặc tôi đã hiểu nhầm những gì bạn đang tìm kiếm?

+0

ToLower() không được hỗ trợ trong Dynamic Linq –

+1

Tôi sẽ được d * mned ... Tôi đã thử điều này và nó đã làm việc, mà ngày hôm qua rõ ràng là didnt work: this.someQuery = this.someQuery.Where (field + "ToLower () .Contains (@ 0, true) ", strValue.ToLower()); –

+0

Không thể tin rằng điều này đơn giản. Tôi biết tôi đã thử điều này ngày hôm qua, nhưng có lẽ đã làm lỗi đánh máy hay gì đó. Vâng thx cho đề xuất của bạn! –