2013-03-02 43 views
10

Tôi đang phát triển một ứng dụng C# 4.5 và tôi cần một hàm trả về đúng với sự so sánh sau:Complex "Chứa" chuỗi so sánh

"bla LEONAR d/o bla" .ComplexContains ("leonardo")

Nói cách khác, tôi cần string.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace) cũng để kiểm tra "chứa!

thể bất cứ ai giúp đỡ?

Trả lời

22

Bạn có thể sử dụng một approp riate CompareInfo và sau đó CompareInfo.IndexOf(string, string, CompareOptions) và kiểm tra kết quả với -1. Mẫu:

using System; 
using System.Globalization; 

class Program 
{ 
    static void Main() 
    { 
     var compareInfo = CultureInfo.InvariantCulture.CompareInfo; 
     var options = CompareOptions.IgnoreCase | 
      CompareOptions.IgnoreSymbols | 
      CompareOptions.IgnoreNonSpace; 

     var haystack = "bla Lé OnAr d/o bla"; 
     var needle = "leonardo"; 

     var index = compareInfo.IndexOf(haystack, needle, options); 
     Console.WriteLine(index); // 4 
    } 
} 

Hoặc trong form method:

private static bool ComplexContains(string source, string value) 
{ 
    var index = CultureInfo.InvariantCulture.CompareInfo.IndexOf 
     (source, value, CompareOptions.IgnoreCase | 
     CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace); 
    return index != -1; 
} 
+1

+1 cho đống cỏ khô và kim. :) – publicgk

+0

+1 câu hỏi nhanh ... mặc dù EF5 biến đổi điều này thành TSql như thế nào? im bằng cách sử dụng LINQ ở đây ... – Leonardo

+1

@Leonardo: Tôi rất nghi ngờ rằng nó xử lý mà ở tất cả - Tôi sẽ không mong đợi nó. (Trong tương lai, xin vui lòng cung cấp cho * rất quan trọng * chi tiết như thế này trong câu hỏi ban đầu.) –