2009-11-21 31 views
9

Tôi cần tạo truy vấn để kiểm tra xem một trường (chuỗi) có chứa một hoặc nhiều từ được cung cấp tại thời gian chạy hay không.LINQ Để Sql 'Ở đâu Hoặc' nhà điều hành

Về cơ bản, tôi cần có thể hỏi câu hỏi WhereOr. Điều này có vẻ như nó phải là một vấn đề phổ biến khi giao dịch với LinqToSql.

Tôi đã tìm thấy reference sau đây nhưng không thể hiểu được điều đó - và không biết cách sử dụng nó trong dự án của tôi.

tôi đã thử các vòng lặp sau:

 var query = from d in context.Domains select d; 
     for (int i = 0; i < words.Length; i++) 
     { 
      query = query.Where(d => d.Name.Contains(words[i])); 
     } 

nhưng điều này xây dựng một truy vấn SQL với Ở ĐÂU VÀ khoản KHÔNG đâu HOẶC

+0

tìm thấy một nguồn tài nguyên thú vị: http://www.albahari.com/nutshell/predicatebuilder.aspx –

+0

lookd như bạn đã tìm thấy nó cho mình ^^ Tôi bắt đầu viết trước khi bạn đăng bình luận đó. Hy vọng tôi có thể giúp. –

Trả lời

17

tôi sử dụng PredicateBuilder cho những thứ như vậy.

Việc xây dựng vị trông như thế này:

 var query = from d in context.Domains select d; 
    var predicate = PredicateBuilder<Domains>.False(); 

    for (int i = 0; i < words.Length; i++) 
     { 
      predicate = predicate.Or(d => d.Name.Contains(words[i])); 
     } 
    query = query.Where(predicate); 
+0

+1. Có, đây là những gì tôi cũng khuyên bạn nên – RichardOD

+0

Tự hỏi tại sao điều này không được sao lưu vào LinqToSql –