2014-07-17 17 views
9

Tôi đang viết lại một ứng dụng vb.net và tôi không thể khẳng định là tuyệt vời với vb. Tôi cần phải viết equivilent này trong C#:Có một toán tử VB.NET-Like trong C# không?

Dim bigList = (From gme In dtx.gmc_message_elements 
       Where gme.element_key_name Like "*email" _ 
       Or gme.element_key_name Like "*web" 
       Or gme.element_key_name Like "*both" _ 
       Select gme.element_key_name Distinct).ToList() 

tôi có cho đến nay:

var bigList = (from gme in dtx.gmc_message_elements 
       where gme.element_key_name Like "*email" 
       || gme.element_key_name Like "*web" 
       || gme.element_key_name Like "*both" 
       select gme.element_key_name).FirstOrDefault().ToList(); 

Như bạn thấy tôi không chắc chắn những gì tương đương với các nhà điều hành như là. Tôi chạy điều này thông qua một vài bộ chuyển đổi mã và họ liên tục ném lỗi.

+0

Nguồn bạn đang truy vấn là gì? '.Where (x => x.EndsWith (" email ");' có thể thích hợp. –

+0

Không có toán tử 'Like' trong C#, trong trường hợp này bạn có thể sử dụng' String.EndsWith' (nếu đây là 'LINQ-To -Objects'), nếu không bạn cần sử dụng regex hoặc 'SqlMethods.Like' (nếu nó là' LINQ-To-Sql'). –

+0

Câu hỏi này không phải là một bản sao, mối quan tâm này chuyển đổi toán tử VB.NET 'Like' thành một Tương đương với C# trong khi câu hỏi khác là toán tử 'LIKE' của SQL, những thứ khác nhau ... – Lukazoid

Trả lời

17

Để có được chức năng tương đương nhất, đảm bảo dự án C# của bạn có tham chiếu đến hội đồng Microsoft.VisualBasic.

Sau đó, bạn có thể trực tiếp sử dụng toán tử VB.NET Like từ C# của bạn, ví dụ:

LikeOperator.LikeString(gme.element_key_name, "*web", CompareMethod.Text); 

Hãy chắc chắn bao gồm

using Microsoft.VisualBasic.CompilerServices; 

này sẽ nhận được các chức năng tương đương nhất, tuy nhiên sẽ là những gì tôi xem xét một chút của một hack.

Các tùy chọn khác của bạn sẽ là sử dụng số String.StartsWith, String.EndsWith, String.Contains hoặc Regex.

0

Tôi nghĩ Regex là lựa chọn tốt nhất. Vì thao tác Like hỗ trợ *,?, # Và [], Tôi nghĩ rằng có thể có các mẫu phức tạp có thể dễ dàng khớp với thư viện Regex. Ví dụ: các dòng sau sẽ trả về true.

"aBBBa" Like "a*a" "ajhfgZ1" Like "*Z[12]"

Bây giờ tùy thuộc vào ứng dụng của bạn. Nếu bạn chỉ sử dụng nó để phù hợp với một chuỗi hardcoded đơn giản, bạn có thể trực tiếp sử dụng String.Contains, String, StartsWith hoặc String.EndsWith nhưng đối với việc sử dụng kết hợp phức tạp Regex để có kết quả tốt nhất.

+0

Có lẽ bạn nên thêm các regex thực tế mà bạn đề nghị. Nếu bạn đang cố gắng nói '* Z [12]' là một biểu thức chính quy, điều đó sai. 'a * a' cũng không khớp với' aBBBa' - nó chỉ khớp với 0 hoặc '' '' '' '' '' ''. Bạn có thể có nghĩa là 'a. * A' và' Z [12] '.(Hoặc bạn có thể đã chỉ cố gắng để chứng minh cú pháp giống như, nhưng điều này là không rõ ràng với tôi.) – 31eee384

+0

hiii a * a không phù hợp với aBBBa. Và thao tác "Thích" khớp với các mẫu bằng các chuỗi, do đó phần mẫu của phương trình không hỗ trợ *,? và vv và * Z [12] có thể được chuyển đổi thành một cụm từ thông dụng mà tôi muốn nói, nhưng đối với hoạt động LIKE đó là cách nó có thể được sử dụng. Thông tin thêm về điều này là tại https://msdn.microsoft.com/en-us/library/swf8kaxw.aspx Anyways cảm thấy tự do để sửa tôi nếu tôi sai. Thats làm thế nào tôi sẽ tìm hiểu :) –

+1

Ok, khiếu nại của tôi là thực sự chỉ là nó không rõ ràng những gì ví dụ của bạn có nghĩa là. 'có thể được so khớp dễ dàng bằng thư viện Regex. Ví dụ: các dòng sau sẽ trả về true.' dẫn tôi tin rằng một vài dòng tiếp theo sẽ có biểu thức chính quy. Chỉ ra rằng bạn đang đưa ra các ví dụ chỉ để cho thấy rằng Like là phức tạp sẽ xóa nó lên tôi nghĩ. – 31eee384