2013-07-02 32 views
8

Làm cách nào để tôi có thể thực hiện LINQ to SQL mà không khớp chính xác? Ví dụ: giả sử tôi có một bảng form với dữ liệu John Smith (2) và tôi muốn tham gia vào trường Smith trong bảng name. Một cái gì đó như thế nàySử dụng chứa trong LINQ to SQL tham gia

var query = 
    from f in db.form 
    join n in db.name 
     on f.nameField like '%' + n.firstName + '%' 

Mặc dù từ khóa like dường như không có sẵn cho tôi.

Trả lời

9

Bạn không thể sử dụng like trong tham gia LINQ. Thực tế, bạn không thể sử dụng like trong LINQ, chỉ có các phương thức chuỗi thông thường như StartsWith, EndsWith hoặc Contains.

Bạn sẽ phải làm một cái gì đó như thế này:

var query = 
    from f in db.form 
    from n in db.name.Where(x => f.nameField.Contains(x.firstName)) 
    ... 
+1

Tôi không biết nếu đó là lỗi triển khai lạ trong mã của tôi hay không, nhưng điều này đã cho tôi một lỗi: 'Chỉ các đối số có thể được đánh giá trên máy khách là su pported cho String.Contains method.' Tôi đã nhận nó để làm việc bằng cách sử dụng 'IndexOf' thay vì' Contains' như chi tiết [ở đây] (http://stackoverflow.com/a/7574433/1080891) –

+0

@CavynVonDeylen Hmm, có vẻ như là một hạn chế của Linq-to-SQL. 'string.Contains' là cơ chế tiêu chuẩn trong các ORM khác. –

+1

@CavynVonDeylen bạn có thể thử làm như sau 'từ n trong db.name.ToList(). Where (x => f.nameField.Contains (x.firstName))'. Phương thức '.ToList()' đánh giá bộ thực thể và đặt mọi thứ ra khỏi cơ sở dữ liệu vào bộ nhớ. Bằng cách này, bạn có thể sử dụng phương thức 'string.Contains()'. Chỉ cần lưu ý và không đánh giá tất cả các đối tượng trong bảng của bạn cùng một lúc. –

5

Trên thực tế, có a way of doing it, nhưng nó không phải là gọn gàng như sử dụng các công cụ LINQ tiêu chuẩn:

from c in dc.Organization 
where SqlMethods.Like(c.Hierarchy, "%/12/%") 
select *; 

(mượn từ câu trả lời của người dùng LP trong câu hỏi được liên kết)

+1

+1 Điểm tốt, điều này sẽ hoạt động vì OP đang sử dụng LINQ-to-SQL. Trong hầu hết các trường hợp khác, phương pháp này sẽ không dịch. –

+1

@ p.s.w.g true! nên đã đề cập rằng, điều này là đúng linq-to-sql. – Chris