2015-04-16 14 views
6

Chúng tôi có thể sử dụng phương thức .Contains(string) trong Biểu thức LINQ, có vẻ như '% văn bản tìm kiếm%', phương pháp .StartsWith(string), có vẻ như 'văn bản tìm kiếm%' và phương thức .EndsWith(string) như '% văn bản tìm kiếm'.Truy vấn LINQ Ở đâu() Tương đương SQL%

Nhưng tôi cần một thứ có âm '% search% text%', tìm tất cả nội dung chứa 'tìm kiếm' và 'văn bản', nhưng không tìm thấy tuần tự.

Ví dụ: Tôi có những hồ sơ này:

tìm kiếm văn bản của tôi

tìm kiếm các văn bản

tìm kiếm văn bản

Trong SQL, truy vấn với LIKE '%search%text%' mang lại:

tìm kiếm văn bản tôi

tìm kiếm cho văn bản

Nhưng không mang 'seek the text'.

Bất kỳ ý tưởng nào?

+2

Sử dụng cụm từ thông dụng: thay thế '%' bằng '. *' Và '_' bằng' .' – zerkms

+4

Tính năng này có hoạt động không? '.Contains (" search ") .Có chứa (" text ")' có thể có một số lỗi cú pháp trong mã của tôi, nhưng tôi hy vọng bạn có được ý tưởng của tôi. – Turtle

+0

Bạn có đang sử dụng LINQ trên các đối tượng hoặc LINQ-to-SQL không? – Blorgbeard

Trả lời

7

Bạn có thể sử dụng một trong những phương pháp helper:

var result = from o in ctx.table 
where SqlMethods.Like(o.column, "%search%text%") 
select o.column; 
0

bạn có thể sử dụng một cái gì đó như thế này:

var rx = new Regex("search.*text", RegexOptions.IgnoreCase); 
List<string> lists=new List<string>(){"search text","search this text","search my book"}; 
var result = lists.Where(x => rx.IsMatch(x)); 

Nếu bạn nhận được đầu vào theo hình thức "search% văn bản", sau đó bạn chỉ có thể thay thế chuỗi "%" bằng ". *" và sử dụng như mẫu Reg ex.

+1

Bạn không thể sử dụng regex với LINQ to sql. Trước tiên, bạn sẽ cần chọn tất cả dữ liệu trong bộ nhớ và sau đó lọc với regex, điều này không hiệu quả so với hàm giống như sẽ lọc dữ liệu trên lớp sql và trả về dữ liệu đã lọc. –

+0

Ý của bạn là gì? Tôi có thể dễ dàng làm: 'từ x trong danh sách nơi rx.IsMatch (x) chọn x;', Nếu bạn đang nói về việc lọc trong trường hợp của linq để sql, sau đó, có, bạn là đúng, mã không lọc trong bộ nhớ vs lọc trong máy chủ sql chính nó, tuy nhiên có chi phí khác nhau để sử dụng LINQ để sql. – ANewGuyInTown

+0

Tôi có nghĩa là nếu bạn có hàng tỷ và muốn lọc chỉ 10 hàng, bạn sẽ cần phải tải hàng tỷ hàng đó vào bộ nhớ đầu tiên là một chi phí lớn –

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