2010-10-20 7 views
6

Tôi biết phương pháp .Contains() làm như LIKE %therm%, phương pháp .StartsWith() làm như LIKE therm% và phương pháp .EndsWith() như LIKE %therm nhưng ...THÍCH với LINQ to Entities

Có cách nào để làm như dưới đây trên **Linq to Entities**?

SELECT * FROM [dbo].[Users] WHERE Name LIKE 'rodrigo%otavio%diniz%waltenberg' 

PS: TÔI SỬ DỤNG LINQ TO ENTITIES. KHÔNG LINQ ĐỂ SQL

+0

Bản sao có thể có của [Làm thế nào để sử dụng SQL 'LIKE' với LINQ to Entities?] (Http://stackoverflow.com/questions/3095781/how-to-use-sql-like -with-linq-to-entity) –

Trả lời

2

Vâng, you can do this with ESQL/Query Builder cú pháp:

var matching = Context.Users.Where("it.Name LIKE 'rodrigo%otavio%diniz%waltenberg'"); 
+2

Đã hoạt động! Cảm ơn! –

+0

Rõ ràng việc này đã ngừng hoạt động với EF 6 – Tod

2

Điều này nên thực hiện thủ thuật.

from u in context.users 
    where System.Data.Linq.SqlClient.SqlMethods.Like(
     u.Name, 
     "rodrigo%otavio%diniz%waltenberg") 
    select u 

Edit:
Hóa ra điều này chỉ làm việc với LINQ2SQL, không LINQ2Entities. Linq SqlMethods.Like fails đề xuất bạn có thể sử dụng trực tiếp Where trên bàn.

+3

Ngoại lệ: LINQ to Entities không nhận ra phương thức 'Boolean Like (System.String, System.String)' phương pháp, và phương pháp này không thể được dịch sang một biểu thức cửa hàng. –

+0

@Rodrigo: Hmmm, l2e hoạt động để gần l2s để được khó hiểu ... Tôi cập nhật câu trả lời của tôi với một LINQ cho một câu hỏi mà có thể hữu ích. –

-1

Làm thế nào về việc sử dụng biểu thức thông thường với tuyên bố LINQ của bạn? Một cái gì đó như sau:

 RegularExpressions.Regex p 
      = new RegularExpressions.Regex("rodrigo%otavio%diniz%waltenberg"); 

     using (DataContext.MyDataContext context = new MyDataContext()) 
     { 
      var result = from u in context.users 
         where p.IsMatch(u.name) 
         select u; 
     } 
+4

Ngoại lệ: LINQ to Entities không nhận ra phương thức 'Phương thức Boolean IsMatch (System.String)' và phương thức này không thể được dịch sang biểu thức cửa hàng. –