2009-06-13 29 views
39

Tôi đang cố gắng xây dựng trang tìm kiếm bằng LINQ to Entities, nhưng đoạn mã sau cho tôi lỗi thời gian chạy về l.t.e. không nhận ra 'Boolean StartsWith(). Mã biên dịch tốt. Làm thế nào tôi có thể làm việc xung quanh điều này tốt hơn so với vận chuyển StartsWith lọc ra một proc được lưu trữ?Vấn đề với LINQ to Entities và String.StartsWith

return from dp in dents.DirectoryPersonEntrySet 
      where 
       ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) 
      select dp; 
+0

Bạn có thể đăng 'mã sau đây' không? Hoặc là đối tượng hoàn thành mã? Bạn có nghĩa là String.StartsWith thay vì Boolean.StartsWith? –

+0

@Rutger, cảm ơn, tôi đã quá nhanh để nhấn gửi và quên mã. Tôi cũng đã sửa chữ ký. – ProfK

+0

Có ít nhất 6 dấu ngoặc đơn thừa, và chúng tôi vẫn thiếu nguyên mẫu hàm và định nghĩa lớp ... – em70

Trả lời

77

Tôi đoán rằng EF không hỗ trợ quá tải StartsWith nhận tham số StringComparison.

Nó sẽ hỗ trợ StartsWith, EndsWith, vì vậy có thể bạn có thể thử:

dp.LastName.StartsWith(searchTerm) 

hay:

dp.LastName.ToLower().StartsWith(searchTerm) 

và sau đó hãy chắc chắn rằng searchTerm cũng là chữ thường .

+2

Quyền chết, toàn bộ chuỗi tùy chọn thang ném EF – ProfK

+0

Làm việc như sự quyến rũ, Cảm ơn bạn –

+1

Được đánh giá đúng, nhưng hãy nhớ rằng nó không phân biệt chữ hoa chữ thường khi được dịch sang SQL. – marsze

Các vấn đề liên quan